Scrolling child div scrolls the window, how do I stop that?

后端 未结 14 750
生来不讨喜
生来不讨喜 2020-11-30 18:03

I have a div, with a scroll bar, When it reaches the end, my page starts scrolling. Is there anyway I can stop this behavior ?

14条回答
  •  时光说笑
    2020-11-30 19:00

    Here's a cross-browser way to do this on the Y axis, it works on desktop and mobile. Tested on OSX and iOS.

    var scrollArea = this.querySelector(".scroll-area");
    scrollArea.addEventListener("wheel", function() {
        var scrollTop = this.scrollTop;
        var maxScroll = this.scrollHeight - this.offsetHeight;
        var deltaY = event.deltaY;
        if ( (scrollTop >= maxScroll && deltaY > 0) || (scrollTop === 0 && deltaY < 0) ) {
            event.preventDefault();
        }
    }, {passive:false});
    
    scrollArea.addEventListener("touchstart", function(event) {
        this.previousClientY = event.touches[0].clientY;
    }, {passive:false});
    
    scrollArea.addEventListener("touchmove", function(event) {
        var scrollTop = this.scrollTop;
        var maxScroll = this.scrollHeight - this.offsetHeight;
        var currentClientY = event.touches[0].clientY;
        var deltaY = this.previousClientY - currentClientY;
        if ( (scrollTop >= maxScroll && deltaY > 0) || (scrollTop === 0 && deltaY < 0) ) {
            event.preventDefault();
        }
        this.previousClientY = currentClientY;
    }, {passive:false});
    

提交回复
热议问题