1

我需要确定是否只是单击或拖动了可移动的 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");
    });
}

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

4

1 回答 1

2

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

但这里不是这样,因为有两个不同的数组:第一个,oldMousePos, 是在mousedown处理程序中创建的,第二个,newMousePos, 是在fieldMouseDown函数中创建的。

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

if ( oldMousePos[0] === newMousePos[0] && oldMousePos[1] === newMousePos[1] ) {
  // ..
}

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

于 2013-06-09T18:42:06.980 回答