支持事件穿透?使用pointer-events樣式


  使用絕對定位元素,讓元素A完全蓋住元素B時,如何通過元素A來響應元素B的事件呢?

  上圖可以用下面的SVG代碼來實現:

<svg width="200" height="180">
    <rect x="50" y="50" width="50" height="50" fill="#f34b5b" onclick="alert('Clicked')"></rect>
    <rect x="20" y="20" width="160" height="140" fill="#FEDDCE" opacity="0.8"></rect>
</svg>

  第一個rect被第二個rect完全蓋住,因此無法響應onclick事件。在傳統解決辦法中,我們需要編寫JavaScript代碼來實現事件穿透,即首先響應第二個rect元素的onclick事件,通過坐標值來判斷點擊位置是否位於第一個rect元素的范圍內,從而決定是否觸發第一個rect元素的onclick事件。但是如果圖形和圖形之間的關系比較復雜的話,自己編寫代碼工作量會很大,而且代碼執行效率也不高。好在我們可以通過一個CSS樣式來解決該問題:

pointer-events: none;

  將該樣式加到第二個rect元素上,可以很輕松地實現事件穿透效果。該樣式可以應用到任何DOM節點上,所有絕對定位的元素都適用,所有現代主流瀏覽器都已經支持該樣式(經測試IE11也已經支持)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM