首页 >web前端 >js教程 >当内部元素达到滚动边界时如何防止父元素滚动?

当内部元素达到滚动边界时如何防止父元素滚动?

DDD
DDD原创
2024-10-27 17:00:02740浏览

How to Prevent Parent Element Scroll When Inner Element Reaches its Scroll Bounds?

防止父元素在内部元素滚动边界上滚动

使用具有可滚动内容的固定位置浮动元素时,通常需要当内部元素到达其顶部或底部时,防止父元素接管滚动事件。当内部元素的滚动范围有限时,这尤其令人沮丧。

事件冒泡尝试失败

最初,假设 stoppropagation() 可以有效地阻止事件冒泡到父元素。然而,我们发现,尽管输入了指定的函数,事件仍然传播。

鼠标滚轮事件处理解决方案

正确的方法是直接处理鼠标滚轮事件。通过检测事件的wheelDelta并利用浏览器特定的标准化因子,可以确定滚动方向(向上/向下)以及元素滚动的量。

边缘情况处理

关键因素是处理边缘情况,其中鼠标滚轮事件会将滚动位置推到内部元素的限制之外。通过检查滚动位置是在顶部还是底部并相应地调整它,可以防止父元素在这些情况下滚动。

工作解决方案

以下 jQuery 代码采用了这种方法:

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

    if (!up && -delta > scrollHeight - height - scrollTop) {
        $this.scrollTop(scrollHeight);
        ev.preventDefault();
    } else if (up && delta > scrollTop) {
        $this.scrollTop(0);
        ev.preventDefault();
    }
});</code>

通过拦截和规范化鼠标滚轮事件,此代码可确保内部元素的滚动位置保持在其限制范围内,从而有效地防止父元素在适当的情况下滚动。

以上是当内部元素达到滚动边界时如何防止父元素滚动?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn