pointer-events,一個神奇的css屬性

pointer-events,搞前端的朋友們應該聽說過這個屬性吧。每年圣誕節的時候,許多網頁上都會掛出一個雪花飄落的特效增加一些節日氣氛。有一些是用flash實現的,也有用HTML+js實現的。當時就很好奇為何在頁面z軸最上層增加了一個層卻完全不會影響下面元素的任何事件響應。簡直是前端黑科技。

后來看了大神的解釋,原來只用了一個的css屬性pointer-events就可以搞定一切了。

看上去確實很神奇,以為會是事件冒泡代理轉發之類的很難懂的概念。實際上超級簡單,對某一個元素比如div采用div{pointer-events:none}即可讓這個HTML元素(包括它的所有子孫元素)失去所有的事件響應。鼠標焦點會直接無視它,click、mouseover等所有事件會穿透它到達它的下一級元素。這個屬性看起來似乎很有用,讓我一直都想怎樣在項目中能有點實際的意義。

直到這兩天看到網上一個數據可視化的項目案例,終于找到了一個用武之地。

如圖,頁面z軸上分兩層,底層是基于百度地圖和Echarts做的全屏大地圖,上層container容器也是全屏的,是用Vue+webSocket做的實時圖表table和信息展示文字及header部分,看著簡直完美。跑起來測試,地圖無法用滾輪縮放移動了,Echart的組件也無法點擊交互了。原因也很簡單,上層的container層把地圖‘擋住了’,這種時候用pointer-events就很有用了,直接pointer-events:none搞定。但是這樣一來table因為繼承的關系,里面的交互事件也用不了了(本來每行點擊可以彈一個dialog展示詳情的),這時候可以針對table單獨用一個pointer-events:auto事件就又回來了。

這就是我目前遇到了使用這個屬性最好的使用場景,那就是用來做一些特效類的交互層級比較多的頁面,當然如果你腦洞開得夠大,用它動態綁定一些元素,感覺可以玩出一些黑魔法。

如果不知道這個屬性的話,暫時我還真沒想到其它的方案解決這個難題,歡迎談談你的想法啊。不過首先你得先關注我,并轉發呢,也可以加我Q群:142991222一起分享,這樣我們的友誼才能天長地久。

另外,因為是css3屬性,不支持IE直到9!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,801評論 1 92
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,932評論 18 139
  • LBS 位置服務 基于位置的服務,它是通過電信移動運營商的無線電通訊網絡(如GSM網、CDMA網)或外部定位方式(...
    景岳閱讀 990評論 1 0
  • 要做 夜空中最亮的星
    空氣貓啊閱讀 122評論 0 0
  • Q:給定一個直方圖,這里盜一下圖,http://blog.csdn.net/nisxiya/article/det...
    shuff1e閱讀 401評論 0 0