Javascript 检测鼠标实际移动的时间,而不仅仅是页面移动的时间

Javascript 检测鼠标实际移动的时间,而不仅仅是页面移动的时间,javascript,jquery,navigation,mousemove,Javascript,Jquery,Navigation,Mousemove,我在尝试在我的页面上创建导航时遇到了一个相当大的问题。如果鼠标输入某个元素,然后选择该元素,如果使用箭头键,则会选择相对于选定元素的元素。但是,当箭头键导致页面滚动时,这是一个问题,因为(取决于鼠标的位置)它将选择适当的元素,然后在页面移动后立即选择鼠标现在所在的项目(即使您没有移动鼠标) 有人知道如何解决这个问题吗?我试图修补它,但我的解决方案似乎都不起作用。非常感谢您的帮助。请尝试从键盘事件处理程序返回false,在该处理程序中检查箭头键: element.onkeypress = func

我在尝试在我的页面上创建导航时遇到了一个相当大的问题。如果鼠标输入某个元素,然后选择该元素,如果使用箭头键,则会选择相对于选定元素的元素。但是,当箭头键导致页面滚动时,这是一个问题,因为(取决于鼠标的位置)它将选择适当的元素,然后在页面移动后立即选择鼠标现在所在的项目(即使您没有移动鼠标)


有人知道如何解决这个问题吗?我试图修补它,但我的解决方案似乎都不起作用。非常感谢您的帮助。

请尝试从键盘事件处理程序返回false,在该处理程序中检查箭头键:

element.onkeypress = function(ev) {
    // ...
    return false;
}

这将防止浏览器对事件的“默认行为”,即滚动。这也适用于链接,例如:如果您从链接的
单击事件处理程序返回false,则单击链接不会自动跟随它。

我不确定是否完全理解,但您应该能够使用
鼠标移动
按键
事件的组合:

$("#element").mousemove(function(e){
    alert("mouse moved");
});

$("#element").keypress(function(e){
    if (e.keyCode == 38 || e.keyCode == 40){ //up & down arrow keys
        e.preventDefault();
    }
});

听起来您应该在
mousemove
上绑定“当鼠标进入时选择”事件,并在
mousestop
上解除所述事件的绑定
mousestop本身不存在,因此您必须以某种方式创建它或使用插件(至少有一些插件,例如)。我认为这是最简单的解决方案,但您的UI似乎有点奇怪(您希望箭头键正常滚动页面并“选择”一个可能大于滚动大小的元素?

您希望页面移动还是不移动?你可以用小提琴来说明你的问题吗?我想让它上下移动页面,但事实上,当页面移动时,鼠标现在在另一个项目上,然后它选择该项目。因此,如果光标位于页面中心,并且您使用箭头键向下导航页面,则每次页面向下移动时,它都会选择现在位于页面中心的项目,而此时它应该位于底部。我将研究如何设置JSFIDLE。不,即使返回false,它也会继续选择光标所在的项目。返回false应该会禁止滚动,而不是选择光标所在的项目。不过,我不会尝试停止滚动。。。当您使用箭头键导航时,我试图阻止光标选择项目,而不是移动鼠标。