亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解CSS pointer-events屬性的使用

  發(fā)布時(shí)間:2018-07-24 17:11:17   作者:佚名   我要評(píng)論
這篇文章主要介紹了CSS pointer-events屬性的使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在前端的開(kāi)發(fā)中,我們都是直接與用戶接觸,應(yīng)該盡量讓用戶感到操作暢快愉悅,獲得類似native的感覺(jué)。其中動(dòng)畫是最常用的方法。

這里的需求是,彈層的設(shè)計(jì),這個(gè)彈層希望可以像 native 上的彈層一樣,點(diǎn)擊按鈕出現(xiàn),點(diǎn)擊遮罩或按鈕時(shí)關(guān)閉,并且出現(xiàn)和關(guān)閉時(shí)有動(dòng)畫效果(fade,slide等)。

問(wèn)題

在關(guān)閉彈層時(shí),以fadeOut動(dòng)畫效果為例,我這里是利用opacity從1 -> 0的過(guò)程模擬逐漸消失的動(dòng)畫過(guò)程,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;
    }
}

問(wèn)題是opacity為0只是container內(nèi)的元素透明不可見(jiàn)的,container仍然存在于dom節(jié)點(diǎn)中。當(dāng)我們給彈層的蒙層mask綁定關(guān)閉事件時(shí),由于container的z-index非常大,點(diǎn)擊事件都會(huì)觸發(fā)在mask上。

transitionend和animationend事件

為了解決上述問(wèn)題,同時(shí)讓用戶體驗(yàn)更好,我們可以通過(guò)監(jiān)聽(tīng)transitionend和animationend事件等動(dòng)畫效果執(zhí)行完再將container節(jié)點(diǎn)隱藏(display:none)。這樣就不會(huì)出現(xiàn)mask攔截點(diǎn)擊事件的問(wèn)題了。

簡(jiǎn)介

采用CSS技術(shù)生成的動(dòng)畫效果,我們可以在JS中捕獲動(dòng)畫或變換的結(jié)束事件:transitionend和animationend事件標(biāo)準(zhǔn)的瀏覽器事件。transitionend 事件會(huì)在 CSS transition 結(jié)束后觸發(fā)。

animationend 事件會(huì)在一個(gè) CSS 動(dòng)畫完成時(shí)觸發(fā)(不包括完成前就已終止的情況,例如元素變得不可見(jiàn)或者動(dòng)畫從元素中移除)。

代碼示例:

/*
 * 在container元素上監(jiān)聽(tīng)transitionend事件
 * 然后指定一個(gè)函數(shù), 例如 showMessage()
 */
function showMessage() {
    console.log('Transition 已完成');
}
var element = document.getElementById("container");
element.addEventListener("transitionend", showMessage, false);

瀏覽器兼容性

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

 

可以看出,在WebKit瀏覽器里仍然需要使用webkit前綴,所以我們需要根據(jù)各種瀏覽器分別檢測(cè)事件。

缺點(diǎn)

我的需求是,這個(gè)彈層組件可能會(huì)頻繁調(diào)用,即用戶關(guān)閉彈層后,會(huì)再次打開(kāi)。

使用這種方案,通過(guò)監(jiān)聽(tīng)動(dòng)畫結(jié)束事件,在display:none和display:block之間切換,但是這會(huì)增加瀏覽器渲染(重繪和重排)成本,且要考慮瀏覽器兼容性,需要根據(jù)各種瀏覽器分別檢測(cè)事件。

pointer-events CSS 屬性

有沒(méi)有更優(yōu)雅更簡(jiǎn)單的解決呢?下面介紹我們的主角:pointer-events。

需要注意的是,這個(gè)pointer-events不同于Pointer Events(用于處理來(lái)自設(shè)備(包括鼠標(biāo),筆,觸摸屏等)的硬件指針輸入的事件和相關(guān)接口)。

簡(jiǎ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

簡(jiǎn)而言之,pointer-events CSS 屬性指定在什么情況下 (如果有) 某個(gè)特定的圖形元素可以成為鼠標(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.

它主要針對(duì)的是SVG,但已經(jīng)擴(kuò)展到其他html元素。

語(yǔ)法

/* 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 */

比如說(shuō),pointer-events: visibleFill;

這個(gè)只適用于SVG,只有在元素的visibility屬性為visible時(shí),且鼠標(biāo)指針在元素內(nèi)部時(shí),元素才會(huì)成為鼠標(biāo)事件的目標(biāo),fill屬性不影響事件處理。

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

在這里我們更關(guān)注[auto|none]兩個(gè)屬性值。這兩個(gè)屬性值用在其他html元素上也很有意思。

當(dāng)值為auto時(shí)。與pointer-events屬性未指定時(shí)的表現(xiàn)效果相同,對(duì)于SVG內(nèi)容,該值與visiblePainted效果相同。

當(dāng)值為none時(shí),元素永遠(yuǎn)不會(huì)成為鼠標(biāo)事件的target。換而言之,值none表示鼠標(biāo)事件“穿透”該元素并且指定該元素“下面”的任何東西。

瀏覽器兼容性

 

可以看出,pointer-events兼容絕大多數(shù)移動(dòng)端瀏覽器,且沒(méi)有前綴要求。

注意的點(diǎn)

當(dāng)pointer-events值為none時(shí),不一定說(shuō)明該元素的事件監(jiān)聽(tīng)事件永遠(yuǎn)不會(huì)被觸發(fā)。如果他的子元素有明確的設(shè)定pointer-events屬性,且指定自己能成為鼠標(biāo)事件的目標(biāo),那么觸發(fā)的過(guò)程會(huì)通過(guò)事件冒泡傳到父元素,父元素的事件監(jiān)聽(tīng)事件就會(huì)被觸發(fā)。

總結(jié)

在彈層組件可能會(huì)頻繁調(diào)用的情況下,使用pointer-events方案,即點(diǎn)擊遮罩或按鈕時(shí)關(guān)閉時(shí),設(shè)置container動(dòng)畫效果和pointer-events:none,彈層出現(xiàn)時(shí),再設(shè)置pointer-events:auto。這樣只需改變css的屬性即可解決問(wèn)題。

以上所述是小編給大家介紹的CSS pointer-events屬性的使用,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • css3 pointer-events 介紹詳解

    本篇文章主要介紹了css3 pointer-events,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-18
  • CSS利用pointer-events防止重復(fù)點(diǎn)擊的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于CSS利用pointer-events防止重復(fù)點(diǎn)擊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者理解具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋
    2017-08-07
  • 使用CSS的pointer-events屬性實(shí)現(xiàn)鼠標(biāo)穿透效果的神奇技巧

    當(dāng)pointer-events的值設(shè)置為none之后,瀏覽器將不會(huì)獲得鼠標(biāo)在當(dāng)前位置的層上的點(diǎn)擊事件,而造成鼠標(biāo)穿透的效果!下面就來(lái)為大家展開(kāi)講解一下使用CSS的pointer-events屬性實(shí)現(xiàn)
    2016-06-28
  • css中pointer-events屬性詳解

    本文主要介紹了CSS中的pointer-events屬性的用法,十分的詳細(xì),有需要的小伙伴參考下。
    2015-02-26
  • CSS的pointer-events屬性詳細(xì)介紹(作用和注意事項(xiàng))

    現(xiàn)代瀏覽器里CSS的職責(zé)范圍和JavaScript的越來(lái)越模糊分不清。比如CSS里-webkit-touch-callout屬性在iOS里能禁止當(dāng)用戶點(diǎn)擊時(shí)彈出氣泡框
    2014-04-23
  • css pointer-events屬性實(shí)現(xiàn)下面元素可點(diǎn)擊

    是否曾經(jīng)有過(guò)這樣的經(jīng)歷:把一個(gè)元素置于另一個(gè)元素之上,而希望下面的那個(gè)元素成為可點(diǎn)擊的?現(xiàn)在,利用css的pointer-events屬性即可做到。
    2010-04-17
  • css不常見(jiàn)屬性之pointer-events的使用方法

    這篇文章主要介紹了css不常見(jiàn)屬性之pointer-events的使用方法的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-27

最新評(píng)論