gpt4 book ai didi

javascript - 如何确定 onmousemove 事件的方向?

转载 作者:可可西里 更新时间:2023-11-01 02:29:47 25 4
gpt4 key购买 nike

例如,在某些情况下,我想在鼠标按下时取消 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;
...
}
});

这只会在以下情况下检查光标的位置及其过去的位置:

  1. 存在最后一个位置。
  2. mousemove_ok 变量设置为 true,每半秒执行一次。

这是一个节流演示:http://jsfiddle.net/Dv29e/4/

关于javascript - 如何确定 onmousemove 事件的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com