首頁 >web前端 >js教程 >當內部元素達到滾動邊界時如何防止父元素滾動?

當內部元素達到滾動邊界時如何防止父元素滾動?

DDD
DDD原創
2024-10-27 17:00:02700瀏覽

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