防止父元素在内部元素滚动边界上滚动
使用具有可滚动内容的固定位置浮动元素时,通常需要当内部元素到达其顶部或底部时,防止父元素接管滚动事件。当内部元素的滚动范围有限时,这尤其令人沮丧。
事件冒泡尝试失败
最初,假设 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中文网其他相关文章!