滚动div元素时阻止页面滚动

时间:2015-11-12 13:25:30

标签: javascript jquery html css

我已经在接受的答案中找到了解决方案:

How to prevent page scrolling when scrolling a DIV element?

但是也想禁用在键上滚动主页面(当div内容不能再滚动时)。

我正在尝试制作类似这样的东西,但它不起作用:

$( '.div-scroll' ).bind( 'keydown mousewheel DOMMouseScroll', function ( e ) {
                var e0 = e.originalEvent,
                delta = e0.wheelDelta || -e0.detail;

                this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;

                if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
                    e.preventDefault();
                }
                e.preventDefault();
            });

任何想法为什么?

3 个答案:

答案 0 :(得分:8)

您可以通过执行以下操作停止整个页面的滚动:

方法1

x ** 2 + y ** 2 == z ** 2

但只要将鼠标悬停在div上,它就会使浏览器的滚动条消失。

方法2

否则你可以看一下jquery-mousewheel。

<div  onmouseover="document.body.style.overflow='hidden';"  onmouseout="document.body.style.overflow='auto';"></div>

DEMO

方法3

在没有插件的情况下停止传播。

HTML

var toolbox = $('#toolbox'),
    height = toolbox.height(),
    scrollHeight = toolbox.get(0).scrollHeight;

toolbox.off("mousewheel").on("mousewheel", function (event) {
  var blockScrolling = this.scrollTop === scrollHeight - height && event.deltaY < 0 || this.scrollTop === 0 && event.deltaY > 0;
  return !blockScrolling;
});

JS

<div class="Scrollable">
  <!-- A bunch of HTML here which will create scrolling -->
</div>

方法4

你可以通过取消这些互动事件来做到这一点:

鼠标&amp;触摸滚动和与滚动相关联的按钮。

$('.Scrollable').on('DOMMouseScroll mousewheel', function(ev) {
    var $this = $(this),
        scrollTop = this.scrollTop,
        scrollHeight = this.scrollHeight,
        height = $this.height(),
        delta = (ev.type == 'DOMMouseScroll' ?
            ev.originalEvent.detail * -40 :
            ev.originalEvent.wheelDelta),
        up = delta > 0;

    var prevent = function() {
        ev.stopPropagation();
        ev.preventDefault();
        ev.returnValue = false;
        return false;
    }

    if (!up && -delta > scrollHeight - height - scrollTop) {
        // Scrolling down, but this will take us past the bottom.
        $this.scrollTop(scrollHeight);
        return prevent();
    } else if (up && delta > scrollTop) {
        // Scrolling up, but this will take us past the top.
        $this.scrollTop(0);
        return prevent();
    }
});

答案 1 :(得分:4)

您需要将文档绑定到'keydown'事件,如下所示:

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

答案 2 :(得分:3)

此代码使用键阻止滚动:

$(document).keydown(function(e) {
        if (e.keyCode === 32 || e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40) {
            return false;
        }
});