jQuery比较mousedown / mouseup之前和之后的鼠标位置

时间:2013-06-09 18:39:19

标签: javascript jquery mousedown mouseup

我需要确定是否只是点击或拖动了一个可移动的div。 我知道这个问题有多种解决方案,但由于整个项目的性质和我使用的脚本,我不能应用其他方法,因为它们会干扰一些jQuery方法。

这是我的代码:

$('.textFieldOuter').mousedown(function(e) {
    var oldMousePos = [e.pageX,e.pageY];
    fieldMouseDown(oldMousePos,$(this));
});

function fieldMouseDown(oldMousePos,field) {
    field.bind("mouseup",function(e) {
        var newMousePos = [e.pageX,e.pageY];
        console.log("oldMousePos: " + oldMousePos);
        console.log("newMousePos: " + newMousePos);
        if(oldMousePos == newMousePos) { console.log("Mouse did NOT move!") }
        else if(oldMousePos != newMousePos) { console.log("Mouse MOVED!") }
        $(this).unbind("mouseup");
    });
}

为什么此代码始终记录“Mouse MOVED!”事实上,只是点击鼠标而不是在“mouseup”事件之前移动鼠标?在控制台中,它甚至可见,变量“oldMousePos”和“newMousePos”存储完全相同的坐标,如果鼠标未被拖动,但“鼠标已移动!”已记录。这是为什么?

1 个答案:

答案 0 :(得分:2)

你在这里比较两个数组,而数组是对象:因此,只有当两个操作数实际上都是同一个对象时,JavaScript中的=====才会返回true

但事实并非如此,因为有两个不同的数组:第一个是oldMousePos,是在mousedown处理程序中创建的,第二个是newMousePos,是在{{1功能。

要比较它们,请分别比较每个字段:

fieldMouseDown

...或者只是将每个坐标作为单独的参数发送到该函数中。