1

非常简单:

当用户按下箭头键时,是否可以防止浏览器滚动?

4

7 回答 7

10

是的。使用类似: document.getElementById('yourID').onkeypress = HandleKeyPress;

function HandleKeyPress(e) {
    var e = e || window.event;
    switch (e.keyCode) {

        case e.DOM_VK_LEFT:
        case e.DOM_VK_RIGHT:
        case e.DOM_VK_UP:
        case e.DOM_VK_DOWN:
            if (e.preventDefault)
                e.preventDefault();
            else e.returnValue = false;
    }
}

尽管这样做可能不是一个好主意。请确保您没有忽略更好的方法。

于 2009-05-26T13:45:11.650 回答
7

非常直截了当:是的,但不要这样做。

改变浏览器运行方式的基本操作只会让用户感到困惑或愤怒,并使整个体验变得不那么友好。用户应该最终控制他或她的浏览器的运行方式,而不是您。这类似于阻止访问菜单项或删除上下文菜单等。

于 2009-05-26T13:48:47.740 回答
2

似乎很多人都说不要破坏浏览器的功能。

我会这么说,除非你用类似或更好的功能替换它。

我经常在溢出的元素中终止键盘滚动,因为我已经向使用键盘“向下”和“向上”键选择项目的元素添加了一个键盘事件(想想 finder 或 Windows 资源管理器窗口)。

默认滚动使交互变得很奇怪。如果选择了最上面的项目,则按下“向下”键,它将选择下一个项目,然后向下滚动元素并隐藏刚刚选择的内容。

所以我打破了默认滚动,然后添加我自己的滚动到所选项目,如果它低于(或高于)当前滚动视图。这样,在通过文件上下键时,它的行为与任何操作系统完全相同。

只是说,随心所欲地破坏它,但要确保你知道为什么要破坏它并且用户不会注意到任何事情。

于 2009-05-26T15:43:25.310 回答
1

在 jQuery 中你可以这样做:

$().keydown(function(e) { return e.keyCode != 38 && e.keyCode != 40; });
于 2009-05-26T13:46:30.100 回答
0

可能,但打破每个人都知道和理解的约定通常不是一个好主意:D

于 2009-05-26T13:44:39.420 回答
0

监听 keydown 事件并防止默认行为。

在jQuery中

$(document).on('keydown.yournamespace', function(e) {e.preventDefault();});
于 2013-11-13T04:07:27.923 回答
-2

在 JQuery 中

$("*").keypress(function(e){e.preventDefault(); return false;});
于 2009-05-26T13:46:28.260 回答