摘要:監聽事件代碼頁面滾動時,需要做的事情知識點使用和來處理頁面上的事件,區別僅僅在于不同事件模型上,處理的順序不一樣。此處的參數確定偵聽器是運行于捕獲階段目標階段還是冒泡階段。如果為,則偵聽器只在目標或冒泡階段處理事件。事件偵聽器的優先級。
監聽事件 代碼
function pageChange () { // ... 頁面滾動時,需要做的事情 } window.addEventListener("scroll" , pageChange, false);知識點
1、使用 window.addEventListener 和 document.addEventListener 來處理頁面上的事件,區別僅僅在于:不同事件模型上,處理的順序不一樣。
捕獲,window 先于 document
冒泡,document 先于 window
2、參數
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)
1) type: String 事件的類型
2) listener: Function 偵聽到事件后處理事件的函數
3) useCapture: Boolean(default = false)
這里牽扯到“事件流”的概念。
偵聽器在偵聽時有三個階段:捕獲階段、目標階段和冒泡階段。
順序 為:捕獲階段(根節點到子節點檢查是否調用了監聽函數)→
目標階段(目標本身)→ 冒泡階段(目標本身到根節點)。
此處的參數確定偵聽器是運行于捕獲階段、 目標階段還是冒泡階段。
如果將 useCapture 設置為 true,則偵聽器只在捕獲階段處理事件,而不在目標或冒泡階段處理事件。 如果useCapture 為 false,則偵聽器只在目標或冒泡階段處理事件。
要在所有三個階段都偵聽事件,請調用兩次 addEventListener,一次將 useCapture 設置為 true,第二次再將useCapture 設置為 false。
4) priority: int (default = 0)
事件偵聽器的優先級。
優先級由一個帶符號的 32 位整數指定。
數字越大,優先級越高。
優先級為 n 的所有偵聽器會在優先級為 n -1 的偵聽器之前得到處理。 如果兩個或更多個偵聽器共享相同的優先級,則按照它們的添加順序進行處理。
默認優先級為 0。
5) useWeakReference:Boolean (default = false)
確定對偵聽器的引用是強引用,還是弱引用。
強引用(默認值)可防止您的偵聽器被當作垃圾回收。 弱引用則沒有此作用。
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: 當前頁面滾動高度 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() 方法告訴瀏覽器您希望執行動畫并請求瀏覽器在下一次重繪之前調用指定的函數來更新動畫。該方法使用一個回調函數作為參數,這個回調函數會在瀏覽器重繪之前調用。
當你需要更新屏幕畫面時就可以調用此方法。在瀏覽器下次重繪前執行回調函數。回調的次數通常是每秒60次,但大多數瀏覽器通常匹配 W3C 所建議的刷新頻率。
在大多數瀏覽器里,當運行在后臺標簽頁或者隱藏的
原生方法實現 addClass、removeClass 和 hasClassfunction hasClass( elements, cName ) { return !!elements.className.match( new RegExp( "(s|^)" + cName + "(s|$)") ) } function addClass( elements, cName ) { if( !hasClass( elements,cName ) ) { elements.className += " " + cName; } } function removeClass( elements, cName ){ if( hasClass( elements,cName ) ){ elements.className = elements.className.replace( new RegExp( "(s|^)" + cName + "(s|$)" ), " " ); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98608.html
摘要:用于獲得當前元素到定位父級頂部的距離偏移值。后來在項目中總會遇到滾動吸頂的效果需要實現,現在我將我知道的種滾動吸頂實現方式做詳細介紹。有兼容性問題,在微信瀏覽器某些版本中的值會為,于是乎也就有了第三種方案的兼容性寫法。修改版預覽 這篇文章是三天前寫就的,有大佬給我提了一些修改意見,我覺得這個意見確實中肯。所以就有了這個升級的修改版本。代碼同步更新到 GitHub 了。 修改內容如下: 添加...
摘要:因為項目需求,最近開始轉到微信公眾號開發,接觸到了框架,這個效果的實現雖說是基于框架下實現的,但是同樣也可以借鑒到其他地方,原理都是一樣的。上面我們得到了一個的屬性值,接下來我們只需要根據它的值來設置吸頂元素的屬性就可以了。 因為項目需求,最近開始轉到微信公眾號開發,接觸到了Vue框架,這個效果的實現雖說是基于Vue框架下實現的,但是同樣也可以借鑒到其他地方,原理都是一樣的。 進入正題...
摘要:直接由合成線程處理的事件不經過內核線程就能快速處理的輸入事件為手勢輸入事件滑動捏合。劃重點最騷的來了,雖然手勢事件可以不在內核線程處理,但是手勢事件的產生還是離不開內核線程。 passived到底有什么用? passived主要用于優化瀏覽器頁面滾動的性能,讓頁面滾動更順滑~~ passived產生的歷史時間線 addEventListener():大家都是認識的,為dom添加觸發事件...
摘要:后兩個屬性可選。屬性定義了項目的縮小比例,默認為,即如果空間不足,該項目將縮小。屬性定義了在分配多余空間之前,項目占據的主軸空間。它的默認值為,即項目的本來大小。結合的異步組件和的代碼分割功能,輕松實現路由組件的懶加載。 項目總結 這是我第二個用 Vue 實現的項目,下面內容包括了在實現過程中所記錄的知識點以及一些小技巧 項目演示地址:https://music-vue.n-y.io源...
閱讀 1365·2021-10-09 09:44
閱讀 1444·2021-09-28 09:36
閱讀 15988·2021-09-22 15:55
閱讀 1248·2021-09-22 15:45
閱讀 2205·2021-09-02 09:48
閱讀 2789·2019-08-29 17:19
閱讀 2301·2019-08-29 10:54
閱讀 915·2019-08-23 18:40