我需要确定是否只是点击或拖动了一个可移动的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”存储完全相同的坐标,如果鼠标未被拖动,但“鼠标已移动!”已记录。这是为什么?
答案 0 :(得分:2)
你在这里比较两个数组,而数组是对象:因此,只有当两个操作数实际上都是同一个对象时,JavaScript中的==
和===
才会返回true
。
但事实并非如此,因为有两个不同的数组:第一个是oldMousePos
,是在mousedown
处理程序中创建的,第二个是newMousePos
,是在{{1功能。
要比较它们,请分别比较每个字段:
fieldMouseDown
...或者只是将每个坐标作为单独的参数发送到该函数中。