防止窗口滚动jquery

时间:2011-12-13 07:22:28

标签: javascript jquery scroll

我正在开发jquery中的选择菜单替换 首先,我只需将tabindex="0"添加到容器即可使新的选择菜单具有焦点 然后,我禁用原始选择菜单上的焦点并将焦点放在新的菜单上。 当新的一个被聚焦并且您按下向上和向下箭头时,选项会相应地改变,但是存在一个很大的问题。当你按下箭头时,身体也会移动 到目前为止,我尝试了所有这些解决方案,但没有运气:

$(window).unbind('scroll');
$(document).unbind('scroll');
$('body').unbind('scroll');
$(window).unbind('keydown');
$(document).unbind('keydown');

检查此处的代码http://pastebin.com/pVNMqyui 此代码来自Ideal Forms http://code.google.com/p/idealforms的开发版本,我即将发布,并提供键盘支持。

为什么这不起作用?

编辑:已解决!

在这篇文章中找到答案jquery link tag enable disable

var disableScroll = function(e){
    if (e.keyCode === 40 || e.keyCode === 38) {
        e.preventDefault();
        return false;
    }
};
// And then...
events.focus: function(){ $(window).on('keydown', disableScroll); }
events.blur: function(){ $(window).off('keydown', disableScroll); }

有效!

5 个答案:

答案 0 :(得分:2)

在你的keydown处理程序中,对于向上和向下键,返回false如下:

'keydown' : function (e) {
    if (e.keyCode === 40) { // Down arrow
        that.events.moveOne('down');
    }
    if (e.keyCode === 38) { // Up arrow
        that.events.moveOne('up');
    }
    return false;
}

此外,请确保此返回传播到浏览器的本机onkeydown,具体取决于您使用的框架/方式。

答案 1 :(得分:0)

您需要取消箭头键的keydown事件。如果已按下箭头键,请在e.preventDefault()处理程序中使用return false.keydown()

答案 2 :(得分:0)

在这篇文章中找到答案jquery link tag enable disable

var disableScroll = function(e){
    if (e.keyCode === 40 || e.keyCode === 38) {
        e.preventDefault();
        return false;
    }
};
// And then...
events.focus: function(){ $(window).on('keydown', disableScroll); }
events.blur: function(){ $(window).off('keydown', disableScroll); }

答案 3 :(得分:-1)

它非常简单。你甚至不需要jQuery。

jQuery的:

$("body").css("overflow", "hidden");

的javascript

<body style="overflow: hidden">

添加样式:

<style>
 body {width:100%; height:100%; overflow:hidden, margin:0}
 html {width:100%; height:100%; overflow:hidden}
</style>

如果要绑定箭头键,请尝试以下操作:

$('body').keydown(function(e){
    e.preventDefult();
    if(e.keyCode == 37) // for left key
    {
        // implement focus functionality
    }
    if(e.keyCode == 38) // for up key
    {
        // implement focus functionality
    }
    if(e.keyCode == 39) // for right key
    {
        // implement focus functionality
    }
    if(e.keyCode == 40) // for doqn key
    {
        // implement focus functionality
    }
});

答案 4 :(得分:-1)

实现同样目标的最佳方法是将正文溢出设置为隐藏

$("body").css("overflow", "hidden");

在这个过程之后只做相反的

`$("body").css("overflow", "hidden");