亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

詳解CSS pointer-events屬性的使用

2024-07-11 08:59:19
字體:
來源:轉載
供稿:網友

在前端的開發中,我們都是直接與用戶接觸,應該盡量讓用戶感到操作暢快愉悅,獲得類似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 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 屬性指定在什么情況下 (如果有) 某個特定的圖形元素可以成為鼠標事件的 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屬性的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品999| 欧美激情极品视频| 色综合久久悠悠| 2019中文字幕在线免费观看| 精品一区二区电影| 中文欧美日本在线资源| 国产精品高潮在线| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品wwwww| 国产免费亚洲高清| 欧美一乱一性一交一视频| 亚洲天天在线日亚洲洲精| 日韩成人小视频| 91爱爱小视频k| 欧美黑人一级爽快片淫片高清| 精品久久久在线观看| 国产精品88a∨| 日韩av片免费在线观看| 亚洲第一精品久久忘忧草社区| 日韩免费在线观看视频| 国产在线观看不卡| 久久最新资源网| 亚洲欧美成人在线| 97久久精品视频| 亚洲欧洲日产国产网站| 国产亚洲精品激情久久| 欧美国产极速在线| 日韩免费电影在线观看| 久久影院模特热| 国产在线观看精品| 久久精品国产清自在天天线| 91av在线免费观看视频| 青青久久aⅴ北条麻妃| 法国裸体一区二区| 国产精品678| 久久久久五月天| 亚洲电影成人av99爱色| 欧美一区二区三区免费视| 亚洲视频在线免费观看| 亚洲天堂第一页| 国产欧美日韩专区发布| 欧美福利在线观看| 97国产在线视频| 91国产精品电影| 欧美一区二粉嫩精品国产一线天| 亚洲一区二区久久久久久| 伊人激情综合网| 亚洲深夜福利在线| 国产精品国语对白| 欧美日韩精品在线播放| 亚洲欧美999| 日韩中文字幕国产| 91久久精品视频| 亚洲欧洲国产一区| 久久精品一区中文字幕| 欧美视频在线观看免费网址| 欧美日韩色婷婷| 欧美一级视频免费在线观看| 亚洲综合中文字幕在线观看| 91啪国产在线| www.欧美三级电影.com| 亚洲小视频在线| 91香蕉国产在线观看| 久久99久久99精品中文字幕| 欧美精品免费在线| 91精品国产高清自在线| 日韩综合中文字幕| 欧美不卡视频一区发布| 热99在线视频| 亚洲二区在线播放视频| 97精品视频在线播放| 欧洲美女7788成人免费视频| 亚洲二区在线播放视频| 色老头一区二区三区在线观看| 性欧美暴力猛交69hd| 欧美一级在线播放| 黑人精品xxx一区| 日本19禁啪啪免费观看www| 亚洲情综合五月天| 欧美日韩国产中文精品字幕自在自线| 精品成人av一区| 日韩av网站大全| 欧美性猛交xxxx乱大交极品| 精品网站999www| 国产精品视频yy9099| 亚洲性av在线| 国产91九色视频| 国产视频在线一区二区| 国产香蕉一区二区三区在线视频| 久久综合伊人77777| 欧美日韩一区二区三区| 在线观看成人黄色| 欧美性猛交xxxx免费看久久久| 亚洲第一精品自拍| 久久久噜久噜久久综合| 亚洲色图在线观看| 国产精品旅馆在线| 欧美日韩国产专区| 国产精品高潮在线| 91精品国产高清自在线看超| 日韩电影中文 亚洲精品乱码| 亚洲欧美自拍一区| 亚洲精品在线看| 国产91在线播放| 91色精品视频在线| 国产精品久久久久久久av电影| 亚洲欧美国产高清va在线播| 国产91精品黑色丝袜高跟鞋| 欧美激情成人在线视频| 久久久久久亚洲精品| 欧美成人精品不卡视频在线观看| 97国产一区二区精品久久呦| 不卡在线观看电视剧完整版| 日本韩国在线不卡| 国产一区二中文字幕在线看| 91理论片午午论夜理片久久| 亚洲精品久久视频| 日韩av在线不卡| 国产丝袜一区视频在线观看| 91精品国产高清久久久久久| 国产亚洲人成a一在线v站| 中文欧美日本在线资源| 日本精品久久电影| 亚洲伊人第一页| 午夜精品蜜臀一区二区三区免费| 亚洲国产成人久久| 欧美激情第1页| 欧美视频二区36p| 亚洲乱码国产乱码精品精天堂| 亚洲一区二区免费在线| 一区二区三区久久精品| 在线看福利67194| 4k岛国日韩精品**专区| 亚洲欧洲成视频免费观看| 久久久久久网址| 日韩欧美在线字幕| 亚洲bt欧美bt日本bt| 日韩视频在线观看免费| 亚洲精品网站在线播放gif| 久久久中精品2020中文| 欧美激情亚洲另类| 日韩av高清不卡| 丁香五六月婷婷久久激情| 亚洲free嫩bbb| 色偷偷噜噜噜亚洲男人的天堂| 国产一区二区精品丝袜| 亚洲国产精品高清久久久| 亚洲欧美变态国产另类| 久久精品国产清自在天天线| 91伊人影院在线播放| 色妞色视频一区二区三区四区| 欧美激情精品久久久久久免费印度| 久久成年人视频| 欧美成人免费小视频| 久久精品成人欧美大片| 欧美激情图片区| 91国产美女视频| 亚洲美女动态图120秒| 欧美精品在线免费观看| 裸体女人亚洲精品一区| 欧美电影在线观看高清| 午夜美女久久久久爽久久| 国产精品wwww| 欧美成aaa人片在线观看蜜臀|