在javascript / jquery中ping一个div

时间:2013-05-03 06:41:38

标签: javascript jquery

我在某种程度上努力解决这个问题。我正在尝试使用jquery来平移DIV。逻辑非常简单。在mouseDown上,我得到X& Y并减去X& Y on mouseMove to pan the div。

但不知何故,div的移动速度更快,无法理解背后的原因。

$('div').on('mousedown', function(e) {
    self.panStartX = e.pageX;
    self.panStartY = e.pageY;
    self.mouseDown = true;
}).on('mousemove', function(e) {
    if (self.mouseDown) {
        var pageTop = parseInt($(this).css('top'), false) || 0;
        var pageLeft = parseInt($(this).css('left'), false) || 0;
        self.panEndX = e.pageX;
        self.panEndY = e.pageY;

        if (self.panStartY > self.panEndY) {
            self.panTop = self.panEndY - self.panStartY;

            pageTop+= self.panTop;
            $(this).css({ top: pageTop });
        } else {
            // Down
            self.panTop = self.panStartY - self.panEndY;

            pageTop-= self.panTop;
            if (pageTop > 42) pageTop = 42;

            $(this).css({ top: pageTop });
        }
    }
}).on('mouseup', function(e) {
    self.mouseDown = false;
});

以下是演示:http://jsfiddle.net/hvUVy/

2 个答案:

答案 0 :(得分:2)

我认为问题是你如何计算pageTop值。您需要在鼠标按下时找到pageTop并添加/减去差异

$(document).ready(function() {
    var self = {};

    $('div').on('mousedown', function(e) {
        self.panStartX = e.pageX;
        self.panStartY = e.pageY;
        self.mouseDown = true;
        self.pageTop = parseInt($(this).css('top'), false) || 0;
        self.pageLeft = parseInt($(this).css('left'), false) || 0;
    }).on('mousemove', function(e) {
        if (self.mouseDown) {
            var pageTop = self.pageTop;
            var pageLeft = self.pageLeft;
            self.panEndX = e.pageX;
            self.panEndY = e.pageY;

            if (self.panStartY > self.panEndY) {
                self.panTop = self.panEndY - self.panStartY;

                pageTop+= self.panTop;

                $(this).css({ top: pageTop });
            } else {
                // Down
                self.panTop = self.panStartY - self.panEndY;

                pageTop-= self.panTop;
                if (pageTop > 42) pageTop = 42;

                $(this).css({ top: pageTop });
            }
        }
    }).on('mouseup', function(e) {
        self.mouseDown = false;
    });
});

演示:Fiddle

答案 1 :(得分:0)

尝试将 if 语句替换为:

        $(this).css({ top:  self.panEndY - self.panStartY });            
        /*if (self.panStartY > self.panEndY) {
            self.panTop = self.panEndY - self.panStartY;

            pageTop= self.panTop;
            $(this).css({ top: pageTop });
        } else {
            // Down
            self.panTop = self.panStartY - self.panEndY;

            pageTop= self.panTop;
            if (pageTop > 42) pageTop = 42;

            $(this).css({ top: pageTop });
        }*/