CSS之pointer-events屬性

pointer-events 可選的屬性值

  • auto
  • none
  • visiblepainted
  • visiblefill
  • visiblestroke
  • visible
  • painted
  • fill
  • stroke
  • all

其中声滥,對于非 <svg> 元素牡辽,只有屬性 auto 和 none 有效憋肖;

為非 svg 元素指定屬性值

情況1:兩個父子元素重疊

有如下代碼:

<style type="text/css">
    #div_grandfather{
        height : 250px;
        background: orange;
        width:300px;
        border:1px solid;
    }
    #div_parent{
        height:70%;
        background-color:#bbb;
        margin:30px;
        border: 1px solid;
        /*設(shè)置元素的 pointer-event屬性*/
        pointer-events: auto;
    }
    #div_child{
        height:70%;
        background-color:deepskyblue;
        margin:30px;
    }
</style>
<body>
    <div id="div_grandfather" onclick="alert('grandfather')">
        <div id="div_parent" onclick="alert('parent')">
            <div id="div_child" onclick="alert('child')">
            </div>
        </div>
    </div>
</body>

其顯示為:

父子多元素重疊

此時鸡捐,若 #div_parent 的css屬性ponter-events 設(shè)為 auto 醇蝴,則點擊藍色區(qū)域后,瀏覽器會3次彈出對話框贡茅,第一次內(nèi)容為 child 谊路,第二次內(nèi)容為 parent ,第三次內(nèi)容為 grandfather囱挑;

#div_parent 的css屬性 pointer-events 設(shè)為 none 醉顽,則點擊藍色區(qū)域后,瀏覽器只會彈出對話框一次看铆,內(nèi)容為 grandfather 徽鼎;

總結(jié):

  1. 元素默認的 pointer-events 屬性為 auto ,鼠標(其實不一定是鼠標,也可以是手或觸摸筆對屏幕的動作) 在該元素的一個動作能夠被該元素捕獲否淤,進行相應(yīng)代碼的執(zhí)行后悄但,會將該事件轉(zhuǎn)交給父元素執(zhí)行相應(yīng)動作;
  2. 將元素的 pinter-events 屬性設(shè)置為 none石抡,鼠標的動作將不能被該元素及其子元素所捕獲檐嚣,但是能夠被其父元素所捕獲;

情況2:兩個同級元素的重疊

<style type="text/css">
    #div1{
        position: absolute;
        height:250px;
        width:250px;
        background-color:#bbb;
        top:20px;
        left:20px;
    }
    #div2{
        position: absolute;
        height: 150px;
        width: 150px;
        background-color:deepskyblue;
        top:40px;
        left:40px;
        pointer-events: auto;
    }
</style>
<body>
    <div id="div1" onclick="alert('div1')"></div>
    <div id="div2" onclick="alert('div2')"></div>
</body>

其顯示為:

同級元素的重疊

#div2pointer-events 屬性為 "auto" 時啰扛,當點擊藍色區(qū)域后嚎京,瀏覽器只彈出對話框一次,內(nèi)容為:div2隐解;當 #div2pointer-events 屬性為 none 時鞍帝,點擊藍色區(qū)域后,瀏覽器只彈出對話框一次煞茫,內(nèi)容為 div1 帕涌;

總結(jié):

  1. 若HTML上兩個元素之間沒有包含關(guān)系,那么续徽,鼠標事件就不會在這兩個元素之間傳遞蚓曼,而是上層的元素會覆蓋下層的元素,導(dǎo)致下層元素捕獲不到事件钦扭;將上層元素的 pointer-events 屬性設(shè)置為 none 纫版,則上層元素將不捕獲事件,那么事件將被下層元素捕獲到客情;
  2. 若HTML上兩個元素間有包含關(guān)系其弊,那么,子元素獲得鼠標事件后膀斋,會傳遞給父元素瑞凑;

可見,事件的傳遞并不是依賴于元素在顯示上的上下層關(guān)系概页,而是依賴于DOM樹結(jié)構(gòu);

為SVG 元素指定屬性值

剩余的8個屬性值都是為SVG元素而準備的练慕;

首先惰匙,我們需要知道,一個圖形有兩部分組成铃将,一部分是輪廓線项鬼,另一部分是填充;輪廓線通過 stroke 完成劲阎,填充通過 fill 完成绘盟;

visiblePainted

該屬性值等價于 auto ; 當 svg 中的某個元素可見,并且當其 fill 不是 none 時龄毡,點擊填充部分吠卷,該事件能夠被捕捉到,當其 stroke 不是 none 時沦零,點擊輪廓部分祭隔,該事件能夠被捕捉到;

<svg style="pointer-events:visiblePointed;">
   <circle cx="30" cy="30" r="20" stroke="black" stroke-width="10"
      fill="red"  onclick="alert('circle')" />
</svg> 

html 的 svg顯示為:

pic-1

點擊之后(無論點擊的是黑色輪廓還是紅色填充)路操,會彈出一個對話框疾渴,內(nèi)容為 circle

當將 circlefill 的屬性變?yōu)?none 屯仗,顯示變?yōu)椋?/p>

pic-2

此時搞坝,沒有填充,點擊黑色輪廓能夠彈出對話框魁袜,而點擊中間的白色部分將不能彈出對話框桩撮;

visibleFill

將svg的 pointer-events 屬性設(shè)置為visibleFill后:

<svg style="pointer-events:visiblePointed;">
   <circle cx="30" cy="30" r="20" stroke="black" stroke-width="10"
      fill="none"  onclick="alert('circle')" />
</svg> 

顯示與 pic-2 一樣;此時慌核,無論 fill 的值是不是 none距境,點擊填充后,都能彈出對話框垮卓,而點擊輪廓一定不能彈出對話框垫桂;

下面幾個屬性都這樣說明下去未免太過羅嗦,下面是總結(jié)的一個表粟按,對8種屬性的統(tǒng)一說明:

|屬性名|fill||stroke||visibility||
|-|-|-|
|屬性值|none|非none|none|非none|hidden|visible|
|visiblePainted|×|√|×|√|×|-|
|visibleFill|√|√|×|×|×|-|
|visibleStroke|×|×|√|√|×|-|
|visible|√|√|√|√|×|-|
|painted|×|√|×|√|-|-|
|fill|√|√|×|×|-|-|
|stroke|×|×|√|√|-|-|
|all|√|√|√|√|-|-|
|none|×|×|×|×|×|×|

解釋:

  • "√" 表示點擊相應(yīng)的部分(填充或輪廓)能夠被對應(yīng)的 svg元素所捕捉到诬滩; "×" 表示不能被對應(yīng)的svg元素捕捉到;"-" 表示沒影響灭将;

  • 第一列表示 svg 元素的 pointer-events 屬性的取值疼鸟;

  • 第二列表示當 fillnone 時,點擊填充能否被捕捉到庙曙;

  • 第三列表示當 fill不為 none 時空镜,點擊填充能否被捕捉到;

  • 第四列表示當 strokenone 時捌朴,點擊輪廓能否被捕捉到吴攒;

  • 第五列表示當 stroke 不為 none 時,點擊輪廓能否被捕捉到砂蔽;

  • 以上4中情況洼怔,visibility 都為默認值,即 visible左驾;

  • 第六列表示當設(shè)置 visiblilityhidden 時镣隶,點擊元素是否能被捕捉到极谊,如果為 × ,表示無論點擊輪廓或填充安岂,都不能捕捉到轻猖,如果為 - 表示行為和前4種情況一樣,visibility 不產(chǎn)生影響嗜闻;注意:因為元素隱藏蜕依,不能看到元素,所以所說的點擊填充只是其對應(yīng)的位置而已琉雳;

  • 第七列表示 visibilibtyvisible 時的情況样眠;可以看到,在 pointer-eventsnone 時翠肘,無論怎么設(shè)置檐束,元素都不能捕獲事件,可以理解為 svg 是所有 svg中元素的父元素束倍,父元素不能捕獲事件被丧,子元素必然不能捕獲;

完绪妹!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甥桂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邮旷,更是在濱河造成了極大的恐慌黄选,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婶肩,死亡現(xiàn)場離奇詭異办陷,居然都是意外死亡,警方通過查閱死者的電腦和手機律歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門民镜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人险毁,你說我怎么就攤上這事制圈。” “怎么了畔况?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵离唐,是天一觀的道長。 經(jīng)常有香客問我问窃,道長,這世上最難降的妖魔是什么完沪? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任域庇,我火速辦了婚禮嵌戈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘听皿。我一直安慰自己熟呛,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布尉姨。 她就那樣靜靜地躺著庵朝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪又厉。 梳的紋絲不亂的頭發(fā)上九府,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音覆致,去河邊找鬼侄旬。 笑死,一個胖子當著我的面吹牛煌妈,可吹牛的內(nèi)容都是我干的儡羔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼璧诵,長吁一口氣:“原來是場噩夢啊……” “哼汰蜘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起之宿,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤族操,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澈缺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坪创,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年姐赡,在試婚紗的時候發(fā)現(xiàn)自己被綠了莱预。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡项滑,死狀恐怖依沮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枪狂,我是刑警寧澤危喉,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站州疾,受9級特大地震影響辜限,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜严蓖,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一薄嫡、第九天 我趴在偏房一處隱蔽的房頂上張望氧急。 院中可真熱鬧,春花似錦毫深、人聲如沸吩坝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钉寝。三九已至,卻和暖如春闸迷,著一層夾襖步出監(jiān)牢的瞬間嵌纲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工稿黍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疹瘦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓巡球,卻偏偏與公主長得像言沐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酣栈,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理险胰,服務(wù)發(fā)現(xiàn),斷路器矿筝,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • 最近在研究頁面渲染及web動畫的性能問題起便,以及拜讀《CSS SECRET》【https://github.com/...
    qyer0222閱讀 2,341評論 0 6
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font窖维,text-align榆综,li...
    wzhiq896閱讀 1,756評論 0 2
  • 連續(xù)幾個周末都是陰云密布,今天終于能好好的休息一天了铸史。忙的時候總是在想等閑下來的時候要干這個干那個鼻疮,但是真正到了這...
    羅羅飛66閱讀 182評論 0 0
  • Java 中的異常處理機制:Java中的異常有兩大類:Error:系統(tǒng)錯誤,往往是 由軟件運行的硬件換件遭破壞所導(dǎo)...
    itachi閱讀 714評論 0 2