按箭头键时是否可以防止文档滚动?

时间:2009-05-26 13:38:06

标签: javascript html browser dom-events

非常简单:

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

7 个答案:

答案 0 :(得分: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;
    }
}

虽然这样做可能不是一个好主意。只要确保你没有忽视一个更好的方法。

答案 1 :(得分:7)

非常简单:是的,但不要这样做。

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

答案 2 :(得分:2)

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

除非你用相似或更好的功能取代它,否则我会争论相同。

我经常在带有溢出的元素中杀死键盘滚动,因为我在元素中添加了一个键盘事件,其中使用键盘“向下”和“向上”键选择项目(想想查找程序或Windows资源管理器窗口)

默认滚动使交互完全失败。如果选择了顶部项目,则键入“向下”,它将选择下一个项目,然后向下滚动元素并隐藏刚刚选择的内容。

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

只是说,打破你想要的一切,但要确保你知道为什么你要打破它并且用户没有注意到任何事情。

答案 3 :(得分:1)

在jQuery中你可以做到:

$().keydown(function(e) { return e.keyCode != 38 && e.keyCode != 40; });

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

在jquery中

$(document).on('keydown.yournamespace', function(e) {e.preventDefault();});

答案 6 :(得分:-2)

在JQuery中

$("*").keypress(function(e){e.preventDefault(); return false;});