内部元素到达结束时阻止父元素滚动传播
在固定div内滚动且溢出时,经常会遇到滚动request 被父元素“接管”,导致外部文档滚动到工具箱之外。可以通过阻止滚动事件传播来停止此行为。
虽然 jQuery event.stoppropagation() 方法看起来像是一个合适的解决方案,但它无法完全阻止传播。相反,更有效的方法是在 jQuery 中处理 mousewheel 事件。
mousewheel 事件提供了一个wheelDelta 属性,用于指示滚动的方向和数量。通过检查wheelDelta值,您可以确定滚动是否超出内部div的顶部或底部。
为了兼容Internet Explorer,需要使用originalEvent.detail属性,该属性具有与其他浏览器。将细节乘以 -40 可以标准化所有浏览器中的值。
提供的 jQuery 代码演示了这种方法:
<code class="javascript">$(document).on('DOMMouseScroll mousewheel', '.Scrollable', function(ev) { // Get the div's scroll properties var $this = $(this), scrollTop = this.scrollTop, scrollHeight = this.scrollHeight, height = $this.innerHeight(), delta = (ev.type == 'DOMMouseScroll' ? ev.originalEvent.detail * -40 : ev.originalEvent.wheelDelta); // Determine if the scroll would exceed the edge conditions if (delta > 0 && -delta > scrollHeight - height - scrollTop) { // Scrolling down past the bottom, prevent and scroll to bottom $this.scrollTop(scrollHeight); ev.stopPropagation(); ev.preventDefault(); return false; } else if (delta < 0 && delta > scrollTop) { // Scrolling up past the top, prevent and scroll to top $this.scrollTop(0); ev.stopPropagation(); ev.preventDefault(); return false; } });</code>
通过处理鼠标滚轮事件并在到达边缘时阻止滚动传播内部div的,可以有效防止父元素滚动的不良行为,并将滚动保持在所需的容器内。
以上是当内部元素到达末尾时如何防止父元素滚动传播?的详细内容。更多信息请关注PHP中文网其他相关文章!