小編給大家分享一下CSS中pointer-events屬性的使用方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)服務(wù)項目包括塔城網(wǎng)站建設(shè)、塔城網(wǎng)站制作、塔城網(wǎng)頁制作以及塔城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,塔城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到塔城省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
在前端的開發(fā)中,我們都是直接與用戶接觸,應(yīng)該盡量讓用戶感到操作暢快愉悅,獲得類似native的感覺。其中動畫是最常用的方法。
這里的需求是,彈層的設(shè)計,這個彈層希望可以像 native 上的彈層一樣,點擊按鈕出現(xiàn),點擊遮罩或按鈕時關(guān)閉,并且出現(xiàn)和關(guān)閉時有動畫效果(fade,slide等)。

問題
在關(guān)閉彈層時,以fadeOut動畫效果為例,我這里是利用opacity從1 -> 0的過程模擬逐漸消失的動畫過程,container是彈層組件最外層容器:
.container {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 9999;
animation: .5s fadeOut forwards;
}
@keyframes fadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}問題是opacity為0只是container內(nèi)的元素透明不可見的,container仍然存在于dom節(jié)點中。當(dāng)我們給彈層的蒙層mask綁定關(guān)閉事件時,由于container的z-index非常大,點擊事件都會觸發(fā)在mask上。
transitionend和animationend事件
為了解決上述問題,同時讓用戶體驗更好,我們可以通過監(jiān)聽transitionend和animationend事件等動畫效果執(zhí)行完再將container節(jié)點隱藏(display:none)。這樣就不會出現(xiàn)mask攔截點擊事件的問題了。
簡介
采用CSS技術(shù)生成的動畫效果,我們可以在JS中捕獲動畫或變換的結(jié)束事件:transitionend和animationend事件標(biāo)準(zhǔn)的瀏覽器事件。transitionend 事件會在 CSS transition 結(jié)束后觸發(fā)。
animationend 事件會在一個 CSS 動畫完成時觸發(fā)(不包括完成前就已終止的情況,例如元素變得不可見或者動畫從元素中移除)。
代碼示例:
/*
* 在container元素上監(jiān)聽transitionend事件
* 然后指定一個函數(shù), 例如 showMessage()
*/
function showMessage() {
console.log('Transition 已完成');
}
var element = document.getElementById("container");
element.addEventListener("transitionend", showMessage, false);瀏覽器兼容性
以transitionend事件為例,animationend事件相似。

可以看出,在WebKit瀏覽器里仍然需要使用webkit前綴,所以我們需要根據(jù)各種瀏覽器分別檢測事件。
缺點
我的需求是,這個彈層組件可能會頻繁調(diào)用,即用戶關(guān)閉彈層后,會再次打開。
使用這種方案,通過監(jiān)聽動畫結(jié)束事件,在display:none和display:block之間切換,但是這會增加瀏覽器渲染(重繪和重排)成本,且要考慮瀏覽器兼容性,需要根據(jù)各種瀏覽器分別檢測事件。
pointer-events CSS 屬性
有沒有更優(yōu)雅更簡單的解決呢?下面介紹我們的主角:pointer-events。
需要注意的是,這個pointer-events不同于Pointer Events(用于處理來自設(shè)備(包括鼠標(biāo),筆,觸摸屏等)的硬件指針輸入的事件和相關(guān)接口)。
簡介
The ‘pointer-events’ property specifies under what circumstances a given graphics element can be the target element for a pointer event. It affects the circumstances under which the following are processed:
user interface events such as mouse clicks
dynamic pseudo-classes (i.e., :hover, :active and :focus; [CSS2], section 5.11)
hyperlinks
簡而言之,pointer-events CSS 屬性指定在什么情況下 (如果有) 某個特定的圖形元素可以成為鼠標(biāo)事件的 target。
規(guī)范
Its extension to HTML elements, though present in early drafts of CSS Basic User Interface Module Level 3, has been pushed to its level 4.
它主要針對的是SVG,但已經(jīng)擴(kuò)展到其他html元素。
語法
/* Keyword values */ pointer-events: auto; pointer-events: none; pointer-events: visiblePainted; /* SVG only */ pointer-events: visibleFill; /* SVG only */ pointer-events: visibleStroke; /* SVG only */ pointer-events: visible; /* SVG only */ pointer-events: painted; /* SVG only */ pointer-events: fill; /* SVG only */ pointer-events: stroke; /* SVG only */ pointer-events: all; /* SVG only */
比如說,pointer-events: visibleFill;
這個只適用于SVG,只有在元素的visibility屬性為visible時,且鼠標(biāo)指針在元素內(nèi)部時,元素才會成為鼠標(biāo)事件的目標(biāo),fill屬性不影響事件處理。
其他只適用于SVG的屬性介紹不再贅述,可以參考 這里 。
在這里我們更關(guān)注[auto|none]兩個屬性值。這兩個屬性值用在其他html元素上也很有意思。
當(dāng)值為auto時。與pointer-events屬性未指定時的表現(xiàn)效果相同,對于SVG內(nèi)容,該值與visiblePainted效果相同。
當(dāng)值為none時,元素永遠(yuǎn)不會成為鼠標(biāo)事件的target。換而言之,值none表示鼠標(biāo)事件“穿透”該元素并且指定該元素“下面”的任何東西。
瀏覽器兼容性

可以看出,pointer-events兼容絕大多數(shù)移動端瀏覽器,且沒有前綴要求。
注意的點
當(dāng)pointer-events值為none時,不一定說明該元素的事件監(jiān)聽事件永遠(yuǎn)不會被觸發(fā)。如果他的子元素有明確的設(shè)定pointer-events屬性,且指定自己能成為鼠標(biāo)事件的目標(biāo),那么觸發(fā)的過程會通過事件冒泡傳到父元素,父元素的事件監(jiān)聽事件就會被觸發(fā)。
總結(jié)
在彈層組件可能會頻繁調(diào)用的情況下,使用pointer-events方案,即點擊遮罩或按鈕時關(guān)閉時,設(shè)置container動畫效果和pointer-events:none,彈層出現(xiàn)時,再設(shè)置pointer-events:auto。這樣只需改變css的屬性即可解決問題。
看完了這篇文章,相信你對“CSS中pointer-events屬性的使用方法”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
新聞名稱:CSS中pointer-events屬性的使用方法
標(biāo)題URL:http://www.chinadenli.net/article4/iiesie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、企業(yè)網(wǎng)站制作、企業(yè)建站、網(wǎng)站收錄、網(wǎng)頁設(shè)計公司、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)