例如,在某些情况下,我想在鼠标按下时取消onmousemove
事件。是否可以确定onmousemove
事件的方向? jQ或JS都可以。
我有拖放元素。用户向上拖动镜片。例如,如果元素的底部到达文档中的某个位置(即,从文档顶部开始的500px
),则onmousemove
停止。而且,如果用户尝试再次将元素向上拖动,则该功能将不会启动。此元素只能向下拖动。因此,我认为通过捕获mousemove
事件的方向来做到这一点非常容易。但是似乎没有这种标准属性。
最佳答案
您可以保存上一个mousemove
事件的位置以与当前位置进行比较:
//setup a variable to store our last position
var last_position = {},
$output = $('#output');
//note that `.on()` is new in jQuery 1.7 and is the same as `.bind()` in this case
$(document).on('mousemove', function (event) {
//check to make sure there is data to compare against
if (typeof(last_position.x) != 'undefined') {
//get the change from last position to this position
var deltaX = last_position.x - event.clientX,
deltaY = last_position.y - event.clientY;
//check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero
if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {
//left
} else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {
//right
} else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {
//up
} else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {
//down
}
}
//set the new last position to the current for next time
last_position = {
x : event.clientX,
y : event.clientY
};
});
这是一个演示:http://jsfiddle.net/Dv29e/更新
您还可以限制
mousemove
事件以获得更多关于鼠标移至何处的一般想法:var last_position = {},
$output = $('#output'),
mousemove_ok = true,
mouse_timer = setInterval(function () {
mousemove_ok = true;
}, 500);
$(document).on('mousemove', function (event) {
if (mousemove_ok) {
mousemove_ok = false;
...
}
});
这仅在以下情况下才将光标的位置与其过去的位置进行比较:mousemove_ok
变量设置为true
,每半秒钟完成一次。 这是一个受限制的演示:http://jsfiddle.net/Dv29e/4/
关于javascript - 如何确定onmousemove事件的方向?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9047600/