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