搜尋
首頁web前端css教學詳解CSS pointer-events屬性的使用
詳解CSS pointer-events屬性的使用Oct 11, 2018 pm 05:11 PM
csseventspointer

這篇文章主要介紹了CSS pointer-events屬性的使用,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

在前端的開發中,我們都是直接與使用者接觸,應該盡量讓使用者感到操作暢快愉悅,獲得類似native的感覺。其中動畫是最常用的方法。

這裡的需求是,彈層的設計,這個彈層希望可以像native 上的彈層一樣,點擊按鈕出現,點擊遮罩或按鈕時關閉,並且出現和關閉時有動畫效果( fade,slide等)。

問題

#在關閉彈層時,以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內的元素透明不可見的,container仍然存在於dom節點中。當我們給予彈層的蒙層mask綁定關閉事件時,由於container的z-index非常大,點擊事件都會觸發在mask上。

transitionend和animationend事件

為了解決上述問題,同時讓使用者體驗更好,我們可以透過監聽transitionend和animationend事件等動畫效果執行完再將container節點隱藏(display:none)。這樣就不會出現mask攔截點擊事件的問題了。

簡介

採用CSS技術產生的動畫效果,我們可以在JS中捕捉動畫或變換的結束事件:transitionend和animationend事件標準的瀏覽器事件。 transitionend 事件會在 CSS transition 結束後觸發。

animationend 事件會在一個 CSS 動畫完成時觸發(不包括完成前就已終止的情況,例如元素變得不可見或動畫從元素中移除)。

程式碼範例:

/*
 * 在container元素上监听transitionend事件
 * 然后指定一个函数, 例如 showMessage()
 */
function showMessage() {
    console.log('Transition 已完成');
}
var element = document.getElementById("container");
element.addEventListener("transitionend", showMessage, false);

瀏覽器相容性

#以transitionend事件為例,animationend事件相似。

 

可以看出,在WebKit瀏覽器裡仍然需要使用webkit前綴,所以我們需要根據各種瀏覽器分別偵測事件。

缺點

我的需求是,這個彈層元件可能會頻繁調用,即用戶關閉彈層後,會再次打開。

使用此方案,透過監聽動畫結束事件,在display:none和display:block之間切換,但是這會增加​​瀏覽器渲染(重繪和重排)成本,並且要考慮瀏覽器相容性,需要根據各種瀏覽器分別偵測事件。

pointer-events CSS 屬性

有沒有更優雅更簡單的解決呢?以下介紹我們的主角:pointer-events。

要注意的是,這個pointer-events不同於Pointer Events(用來處理來自裝置(包括滑鼠,筆,觸控螢幕等)的硬體指標輸入的事件和相關介面)。

簡介

The 'pointer-events' property specifies under what circumstances a given graphics element can be the target element for a pointer event. It stanects the circumces under which the following are procesed:

  • user interface events such as mouse clicks

  • dynamic pseudo-classes (i.e., :hover, :active and :focus; [CSS2], section 5.11)

  • hyperlinks

簡而言之,pointer-events CSS 屬性指定在什麼情況下(如果有) 某個特定的圖形元素可以成為滑鼠事件的target。

規格

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,但已經擴展到其他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時,且滑鼠指標在元素內部時,元素才會成為滑鼠事件的目標,fill屬性不會影響事件處理。

其他只適用於SVG的屬性介紹不再贅述,可以參考 這裡 。

在這裡我們更關注[auto|none]兩個屬性值。這兩個屬性值用在其他html元素上也很有趣。

當值為auto時。與pointer-events屬性未指定時的表現效果相同,對於SVG內容,該值與visiblePainted效果相同。

當值為none時,元素永遠不會成為滑鼠事件的target。換而言之,值none表示滑鼠事件「穿透」該元素並且指定該元素「下面」的任何東西。

瀏覽器相容性

#

可以看出,pointer-events相容於絕大多數行動裝置瀏覽器,且沒有前綴要求。

注意的點

當pointer-events值為none時,不一定說明該元素的事件監聽事件永遠不會被觸發。如果他的子元素有明確的設定pointer-events屬性,且指定自己能成為滑鼠事件的目標,那麼觸發的過程會透過事件冒泡傳到父元素,父元素的事件監聽事件就會被觸發。

總結

在彈層元件可能會頻繁呼叫的情況下,使用pointer-events方案,即點擊遮罩或按鈕時關閉時,設定container動畫效果和pointer-events:none,彈層出現時,再設定pointer-events:auto。這樣只需改變css的屬性即可解決問題。

以上所述就是給大家介紹的CSS pointer-events屬性所使用的全部內容,希望能對大家的學習有所幫助。更多相關教學請訪問 CSS影片教學 CSS3影片教學

相關推薦:

php公益培訓影片教學

#CSS線上手冊

CSS3線上手冊

div/css圖文教學

css3特效程式碼大全

#

以上是詳解CSS pointer-events屬性的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:脚本之家。如有侵權,請聯絡admin@php.cn刪除
利用CSS怎么创建渐变色边框?5种方法分享利用CSS怎么创建渐变色边框?5种方法分享Oct 13, 2021 am 10:19 AM

利用CSS怎么创建渐变色边框?下面本篇文章给大家分享CSS实现渐变色边框的5种方法,希望对大家有所帮助!

css ul标签怎么去掉圆点css ul标签怎么去掉圆点Apr 25, 2022 pm 05:55 PM

在css中,可用list-style-type属性来去掉ul的圆点标记,语法为“ul{list-style-type:none}”;list-style-type属性可设置列表项标记的类型,当值为“none”可不定义标记,也可去除已有标记。

css与xml的区别是什么css与xml的区别是什么Apr 24, 2022 am 11:21 AM

区别是:css是层叠样式表单,是将样式信息与网页内容分离的一种标记语言,主要用来设计网页的样式,还可以对网页各元素进行格式化;xml是可扩展标记语言,是一种数据存储语言,用于使用简单的标记描述数据,将文档分成许多部件并对这些部件加以标识。

css3怎么实现鼠标隐藏效果css3怎么实现鼠标隐藏效果Apr 27, 2022 pm 05:20 PM

在css中,可以利用cursor属性实现鼠标隐藏效果,该属性用于定义鼠标指针放在一个元素边界范围内时所用的光标形状,当属性值设置为none时,就可以实现鼠标隐藏效果,语法为“元素{cursor:none}”。

rtl在css是什么意思rtl在css是什么意思Apr 24, 2022 am 11:07 AM

在css中,rtl是“right-to-left”的缩写,是从右往左的意思,指的是内联内容从右往左依次排布,是direction属性的一个属性值;该属性规定了文本的方向和书写方向,语法为“元素{direction:rtl}”。

css怎么实现英文小写转为大写css怎么实现英文小写转为大写Apr 25, 2022 pm 06:35 PM

转换方法:1、给英文元素添加“text-transform: uppercase;”样式,可将所有的英文字母都变成大写;2、给英文元素添加“text-transform:capitalize;”样式,可将英文文本中每个单词的首字母变为大写。

css怎么设置i不是斜体css怎么设置i不是斜体Apr 20, 2022 am 10:36 AM

在css中,可以利用“font-style”属性设置i元素不是斜体样式,该属性用于指定文本的字体样式,当属性值设置为“normal”时,会显示元素的标准字体样式,语法为“i元素{font-style:normal}”。

怎么设置rotate在css3的旋转中心点怎么设置rotate在css3的旋转中心点Apr 24, 2022 am 10:50 AM

在css3中,可以用“transform-origin”属性设置rotate的旋转中心点,该属性可更改转换元素的位置,第一个参数设置x轴的旋转位置,第二个参数设置y轴旋转位置,语法为“transform-origin:x轴位置 y轴位置”。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。