我在尝试在我的页面上创建导航时遇到了一个很大的问题。如果鼠标进入一个元素然后选择它,那么如果你使用箭头键,它将选择相对于所选元素的元素。然而,当箭头键导致页面滚动时,这是一个问题,因为(取决于鼠标的位置),它将选择适当的元素,然后在页面移动后立即选择鼠标现在结束的项目(即使你没有不要移动鼠标)。检测鼠标实际移动时,而不仅仅是当页面移动时
有谁知道如何解决这个问题?我试着修补它,但我的解决方案似乎没有工作。任何帮助表示赞赏,谢谢。
我在尝试在我的页面上创建导航时遇到了一个很大的问题。如果鼠标进入一个元素然后选择它,那么如果你使用箭头键,它将选择相对于所选元素的元素。然而,当箭头键导致页面滚动时,这是一个问题,因为(取决于鼠标的位置),它将选择适当的元素,然后在页面移动后立即选择鼠标现在结束的项目(即使你没有不要移动鼠标)。检测鼠标实际移动时,而不仅仅是当页面移动时
有谁知道如何解决这个问题?我试着修补它,但我的解决方案似乎没有工作。任何帮助表示赞赏,谢谢。
这听起来像你应该绑定“选择当鼠标进入”事件上mousemove
和在mousestop
解除所述事件。 mousestop
并不存在,所以你将不得不以某种方式创建它或使用一个插件(至少有几个例如https://github.com/richardscarrott/jquery-mousestop-event/)。我认为这将是最简单的解决方案,但你的用户界面看起来有点奇怪(你希望箭头键通常滚动页面和“选择”一个可能大于滚动大小的元素?)
尝试从那里你检查箭头键键盘事件处理程序返回false:
element.onkeypress = function(ev) {
// ...
return false;
}
这将防止“默认行为”浏览器具备的事件,这是滚动。这也适用于链接,例如:如果您从链接的click
事件处理程序返回false,则单击该链接不会自动跟随它。
不知道我完全理解,但你应该能够使用mousemove
和keypress
事件的组合:
$("#element").mousemove(function(e){
alert("mouse moved");
});
$("#element").keypress(function(e){
if (e.keyCode == 38 || e.keyCode == 40){ //up & down arrow keys
e.preventDefault();
}
});
你*要*页面移动或不是你?你可以设置一个小提示来说明你的问题吗? – 2012-04-05 21:24:36
我希望它移动页面上的按键和keydown,但事实上,当页面移动鼠标现在在一个不同的项目,然后它选择该项目。因此,如果光标位于页面的中心,并且您使用箭头键在页面中向下导航,则每次页面向下移动时,都会选择当前位于页面中心的项目,何时应该打开底端。我会考虑设置一个jsfiddle。 – Ian 2012-04-05 21:28:08