【问题标题】:Setting overflow:hidden to body/html hides scrollbars but does not disable scrolling in Firefox将 overflow:hidden 设置为 body/html 会隐藏滚动条,但不会禁用 Firefox 中的滚动
【发布时间】:2011-05-28 22:59:45
【问题描述】:

我可以在 Chrome/Safari 中禁用滚动,但在 body 标记上隐藏溢出,但在 Firefox 上,这只会隐藏滚动条,我仍然可以使用箭头键滚动。这是为什么呢?

另外,我正在使用 jQuery 制作动画,以滑到我页面上的特定区域。使用 FF,我必须为 html 标签设置动画,但使用 Chrome/Safari,它只是我需要设置动画的主体。尚未在 IE 中进行测试,但我认为那将是可憎的:D。

那么我为什么可以在 Chrome 上禁用 body 的滚动而不是 FF?

注意:哦,我已经尝试在 FF 的 html 标记上设置溢出隐藏,但这只会让它跳到顶部(在正文上隐藏的溢出对两种浏览器都适用)。

【问题讨论】:

  • 为什么不直接使用容器 DIV 而不是 body/html?
  • 您是否建议在正文中使用容器 div?你认为 FF 会对此做出适当的反应吗?
  • 您是否正在尝试做这样的事情? jsfiddle.net/wdm954/pqAJK/10
  • 有点,但不是真的。当我使用溢出关闭滚动时,body/html 仍然可以使用 FF 中的箭头键滚动:隐藏。在 chrome 中,它按预期工作。为努力 +1,但这并不是我真正想要的。

标签: javascript jquery css dom scroll


【解决方案1】:

您可以将body的位置设置为“固定”

【讨论】:

    【解决方案2】:

    我能够在 Firefox 中通过在 html 元素上为 keydown 事件绑定一个 jQuery 侦听器并返回 false 来实现这一点。

    // Disable Scrolling by keys
    $("html").keydown(function(event) {
        switch(event.keyCode) {
            case 32://space
            case 33://pgup
            case 34://pgdn
            case 35://end
            case 36://home
            case 37://left
            case 38://up
            case 39://right
            case 40://down
                return false;
        }
    });
    

    我试过 jQuery 的 event.preventDefault()event.stopImmediatePropogation() 没有效果。

    【讨论】:

      【解决方案3】:

      如果滚动的唯一方式是使用箭头键,您可能只需在按键时返回 false 即可防止这种情况发生。

      【讨论】:

        【解决方案4】:

        如果使用 keydown 功能,则使用键的 textarea 滚动不起作用...所以我已经完成了以下代码。修复了我的 Firefox 滚动问题。

        $(window).scroll(function () { 
          window.scrollTo(0,0);
        });
        

        【讨论】:

          猜你喜欢
          • 2019-11-14
          • 2011-08-14
          • 2017-02-18
          • 2018-08-17
          • 2013-03-01
          • 1970-01-01
          相关资源
          最近更新 更多