国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

監(jiān)聽頁面滾動相關(guān)知識點(diǎn)

Worktile / 844人閱讀

摘要:監(jiān)聽事件代碼頁面滾動時(shí),需要做的事情知識點(diǎn)使用和來處理頁面上的事件,區(qū)別僅僅在于不同事件模型上,處理的順序不一樣。此處的參數(shù)確定偵聽器是運(yùn)行于捕獲階段目標(biāo)階段還是冒泡階段。如果為,則偵聽器只在目標(biāo)或冒泡階段處理事件。事件偵聽器的優(yōu)先級。

監(jiān)聽事件 代碼
function pageChange () {
    // ... 頁面滾動時(shí),需要做的事情
}
window.addEventListener("scroll" , pageChange, false);
知識點(diǎn)

1、使用 window.addEventListenerdocument.addEventListener 來處理頁面上的事件,區(qū)別僅僅在于:不同事件模型上,處理的順序不一樣。

捕獲,window 先于 document

冒泡,document 先于 window

2、參數(shù)
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)

1) type: String 事件的類型

2) listener: Function 偵聽到事件后處理事件的函數(shù)

3) useCapture: Boolean(default = false)
這里牽扯到“事件流”的概念。
偵聽器在偵聽時(shí)有三個(gè)階段:捕獲階段、目標(biāo)階段和冒泡階段。
順序 為:捕獲階段(根節(jié)點(diǎn)到子節(jié)點(diǎn)檢查是否調(diào)用了監(jiān)聽函數(shù))→

            目標(biāo)階段(目標(biāo)本身)→
            冒泡階段(目標(biāo)本身到根節(jié)點(diǎn))。

此處的參數(shù)確定偵聽器是運(yùn)行于捕獲階段、 目標(biāo)階段還是冒泡階段。
如果將 useCapture 設(shè)置為 true,則偵聽器只在捕獲階段處理事件,而不在目標(biāo)或冒泡階段處理事件。 如果useCapture 為 false,則偵聽器只在目標(biāo)或冒泡階段處理事件。

要在所有三個(gè)階段都偵聽事件,請調(diào)用兩次 addEventListener,一次將 useCapture 設(shè)置為 true,第二次再將useCapture 設(shè)置為 false。

4) priority: int (default = 0)
事件偵聽器的優(yōu)先級。
優(yōu)先級由一個(gè)帶符號的 32 位整數(shù)指定。
數(shù)字越大,優(yōu)先級越高。
優(yōu)先級為 n 的所有偵聽器會在優(yōu)先級為 n -1 的偵聽器之前得到處理。 如果兩個(gè)或更多個(gè)偵聽器共享相同的優(yōu)先級,則按照它們的添加順序進(jìn)行處理。
默認(rèn)優(yōu)先級為 0。

5) useWeakReference:Boolean (default = false)   
確定對偵聽器的引用是強(qiáng)引用,還是弱引用。
強(qiáng)引用(默認(rèn)值)可防止您的偵聽器被當(dāng)作垃圾回收。 弱引用則沒有此作用。

獲取頁面滾動高度 代碼
function getScrollTop() {
    return window.pageYOffset 
        || document.documentElement.scrollTop  
        || document.body.scrollTop  
        || 0;
}
瀏覽器兼容性
谷歌 火狐 IE 360 Microsoft Edge
window.pageYOffset Yes Yes Yes Yes Yes
document.documentElement.scrollTop Yes Yes Yes Yes No
document.body.scrollTop No No No No Yes

其中,pageYOffset 屬性返回文檔在窗口左上角垂直方向滾動的像素

讓頁面滾動至指定位置 代碼
/* 滾動動畫
   s: 當(dāng)前頁面滾動高度
   sTop: 指定位置滾動高度
 */
function tabAnimation(s, sTop) {
    var type = s < sTop ? true : false; // true 頁面上滑

    var timmer = requestAnimationFrame(function fn() {
        if (type) { s+=50 } 
        else { s-=50 }
        if((type && s > sTop) || (!type && s < sTop)) {
            // $el.scrollTop = sTop;
            window.scrollTo(0, sTop); 
        } else {
            // $el.scrollTop = s;
            window.scrollTo(0, s); 
          timmer = requestAnimationFrame(fn);
        }
    });
}
說明

window.requestAnimationFrame() 方法告訴瀏覽器您希望執(zhí)行動畫并請求瀏覽器在下一次重繪之前調(diào)用指定的函數(shù)來更新動畫。該方法使用一個(gè)回調(diào)函數(shù)作為參數(shù),這個(gè)回調(diào)函數(shù)會在瀏覽器重繪之前調(diào)用。

當(dāng)你需要更新屏幕畫面時(shí)就可以調(diào)用此方法。在瀏覽器下次重繪前執(zhí)行回調(diào)函數(shù)。回調(diào)的次數(shù)通常是每秒60次,但大多數(shù)瀏覽器通常匹配 W3C 所建議的刷新頻率。

在大多數(shù)瀏覽器里,當(dāng)運(yùn)行在后臺標(biāo)簽頁或者隱藏的