最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在JavaScript中監(jiān)聽鼠標(biāo)滾動(dòng)事件的兩種方法及優(yōu)化技巧

 更新時(shí)間:2026年03月19日 08:24:10   作者:Never_Satisfied  
在網(wǎng)頁(yè)制作中,監(jiān)聽鼠標(biāo)滾動(dòng)通常有兩種含義:一是監(jiān)聽頁(yè)面或元素的滾動(dòng)(scroll?事件),二是監(jiān)聽鼠標(biāo)滾輪的具體操作(wheel?事件),下面分別介紹這兩種方法以及常見的優(yōu)化技巧,需要的朋友可以參考下

引言

在網(wǎng)頁(yè)制作中,監(jiān)聽鼠標(biāo)滾動(dòng)通常有兩種含義:一是監(jiān)聽頁(yè)面或元素的滾動(dòng)scroll 事件),二是監(jiān)聽鼠標(biāo)滾輪的具體操作wheel 事件)。下面分別介紹這兩種方法以及常見的優(yōu)化技巧。

1. 監(jiān)聽頁(yè)面滾動(dòng)(scroll 事件)

當(dāng)用戶滾動(dòng)窗口或某個(gè)可滾動(dòng)元素時(shí),scroll 事件會(huì)被觸發(fā)。適用于檢測(cè)滾動(dòng)位置、實(shí)現(xiàn)懶加載、吸頂效果等。

基本用法

// 監(jiān)聽整個(gè)窗口的滾動(dòng)
window.addEventListener('scroll', function(event) {
    console.log('頁(yè)面滾動(dòng)了');
    // 獲取滾動(dòng)距離
    console.log('scrollY:', window.scrollY);   // 垂直滾動(dòng)距離
    console.log('scrollX:', window.scrollX);   // 水平滾動(dòng)距離
});

監(jiān)聽特定元素的滾動(dòng)

const box = document.querySelector('.scrollable-box');
box.addEventListener('scroll', function() {
    console.log('元素滾動(dòng)了', box.scrollTop);
});

注意事項(xiàng)

  • scroll 事件觸發(fā)非常頻繁,若在回調(diào)中執(zhí)行復(fù)雜操作(如 DOM 操作、網(wǎng)絡(luò)請(qǐng)求),可能導(dǎo)致性能問題。
    解決方案:使用 requestAnimationFrame節(jié)流(throttle) 來控制執(zhí)行頻率。
// 節(jié)流函數(shù)示例(使用 lodash 或自己實(shí)現(xiàn))
function throttle(fn, delay) {
    let timer = null;
    return function(...args) {
        if (!timer) {
            timer = setTimeout(() => {
                fn.apply(this, args);
                timer = null;
            }, delay);
        }
    };
}

window.addEventListener('scroll', throttle(() => {
    console.log('節(jié)流后的滾動(dòng)處理');
}, 100));

2. 監(jiān)聽鼠標(biāo)滾輪 操作(wheel 事件)

wheel 事件在用戶滾動(dòng)鼠標(biāo)滾輪或觸摸板滑動(dòng)時(shí)觸發(fā),能獲取滾動(dòng)的方向、距離等詳細(xì)信息,適用于自定義滾動(dòng)效果、縮放等。

基本用法

window.addEventListener('wheel', function(event) {
    console.log('滾輪事件', event);
    // 滾輪方向
    console.log('deltaY:', event.deltaY); // 垂直滾動(dòng)量(正數(shù)向下,負(fù)數(shù)向上)
    console.log('deltaX:', event.deltaX); // 水平滾動(dòng)量
    console.log('deltaZ:', event.deltaZ);
    
    // 可阻止默認(rèn)滾動(dòng)行為(謹(jǐn)慎使用)
    // event.preventDefault();
}, { passive: false }); // 如果需要 preventDefault,必須設(shè)置 passive: false

注意

  • wheel 事件也是高頻觸發(fā),同樣建議節(jié)流。
  • 現(xiàn)代瀏覽器中,wheel 事件的 passive 選項(xiàng)默認(rèn)為 true(提升滾動(dòng)性能),此時(shí)調(diào)用 preventDefault() 無效。若必須阻止默認(rèn)行為,需顯式設(shè)置 { passive: false }。

3. 舊版瀏覽器兼容(已很少用)

早期瀏覽器使用 mousewheel 事件(非標(biāo)準(zhǔn)),可用以下代碼兼容:

document.addEventListener('mousewheel', function(event) {
    // 類似 wheel,但屬性可能不同
});

但現(xiàn)代瀏覽器均已支持 wheel 事件,一般無需兼容。

總結(jié)

場(chǎng)景推薦事件說明
檢測(cè)滾動(dòng)位置(視口/元素)scroll適用于懶加載、導(dǎo)航欄變化等
檢測(cè)滾輪滾動(dòng)方向和力度wheel適用于自定義滾動(dòng)、縮放、視差效果

兩者都可以通過 addEventListener 綁定,并根據(jù)需要添加節(jié)流優(yōu)化。

到此這篇關(guān)于在JavaScript中監(jiān)聽鼠標(biāo)滾動(dòng)事件的兩種方法及優(yōu)化技巧的文章就介紹到這了,更多相關(guān)JavaScript監(jiān)聽鼠標(biāo)滾動(dòng)事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Bootstrap字體圖標(biāo)無法正常顯示的解決方法

    Bootstrap字體圖標(biāo)無法正常顯示的解決方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap字體圖標(biāo)無法正常顯示的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 解決webpack dev-server不能匹配post請(qǐng)求的問題

    解決webpack dev-server不能匹配post請(qǐng)求的問題

    這篇文章主要介紹了解決webpack不能匹配post請(qǐng)求的問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • JS 數(shù)組基本用法入門示例解析

    JS 數(shù)組基本用法入門示例解析

    這篇文章主要介紹了JS 數(shù)組基本用法,結(jié)合實(shí)例形式分析了JavaScript數(shù)組的定義、初始化、賦值、打印等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • JS限制文本框只能輸入數(shù)字和字母方法

    JS限制文本框只能輸入數(shù)字和字母方法

    這篇文章主要介紹了JS限制文本框只能輸入數(shù)字和字母方法,本文給出了限制只能輸入數(shù)字、限制只能輸入字母、限制只能輸入數(shù)字和字母3種腳本,需要的朋友可以參考下
    2015-02-02
  • 利用BootStrap的Carousel.js實(shí)現(xiàn)輪播圖動(dòng)畫效果

    利用BootStrap的Carousel.js實(shí)現(xiàn)輪播圖動(dòng)畫效果

    這篇文章主要介紹了利用BootStrap的Carousel.js實(shí)現(xiàn)輪播圖動(dòng)畫效果的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • IE8中動(dòng)態(tài)創(chuàng)建script標(biāo)簽onload無效的解決方法

    IE8中動(dòng)態(tài)創(chuàng)建script標(biāo)簽onload無效的解決方法

    這篇文章主要介紹了IE8中動(dòng)態(tài)創(chuàng)建script標(biāo)簽onload無效的解決方法,涉及針對(duì)javascript加載順序的調(diào)整,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • IE6圖片加載的一個(gè)BUG解決方法

    IE6圖片加載的一個(gè)BUG解決方法

    小圖整合在一張大圖里,然后在不同的CSS里調(diào)用同一張圖片,以此來減少請(qǐng)求數(shù),這是頁(yè)面優(yōu)化最常用的手段,但I(xiàn)E6會(huì)對(duì)頁(yè)面里同一個(gè)圖片,只要在不同的地方有引用到就會(huì)重新請(qǐng)求一次,需要加JS代碼解決。
    2010-07-07
  • EditPlus 正則表達(dá)式 實(shí)戰(zhàn)(3)

    EditPlus 正則表達(dá)式 實(shí)戰(zhàn)(3)

    這篇文章主要介紹了EditPlus 正則表達(dá)式 實(shí)戰(zhàn)(3)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 移動(dòng)端腳本框架Hammer.js

    移動(dòng)端腳本框架Hammer.js

    這篇文章主要為大家詳細(xì)介紹了一款開源的移動(dòng)端腳本框架Hammer.js,可以完美的實(shí)現(xiàn)在移端開發(fā)的大多數(shù)事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript實(shí)現(xiàn)隨機(jī)產(chǎn)生字符串的方法分享

    JavaScript實(shí)現(xiàn)隨機(jī)產(chǎn)生字符串的方法分享

    這篇文章主要為大家詳細(xì)介紹了JavaScript中實(shí)現(xiàn)隨機(jī)產(chǎn)生字符串的方法,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,需要的可以參考一下
    2022-11-11

最新評(píng)論

万全县| 西青区| 收藏| 隆化县| 新源县| 荆州市| 双辽市| 收藏| 沅江市| 馆陶县| 双峰县| 天祝| 永兴县| 大庆市| 广东省| 临江市| 凭祥市| 九龙城区| 衡阳市| 石林| 虹口区| 泰安市| 叙永县| 同心县| 拜泉县| 新乡市| 南溪县| 花莲县| 万荣县| 乌审旗| 扬中市| 邳州市| 顺昌县| 米易县| 富蕴县| 南投市| 博乐市| 新和县| 从江县| 屯昌县| 衡东县|