實現多層DIV疊加的js事件穿透

2022-07-09 17:33:10 字數 1222 閱讀 8804

flash裡面有個很好的特性是,乙個容器裡,不存在實際物件的部分,不會阻攔滑鼠事件穿透到下一層。

前端就不一樣了,兩個div層疊以後,上層div會接收到所有事件(即使這個div裡面內容是空的,沒有任何實際物件),下層div什麼事件都接不到。

舉個例子:

這個示意圖中

c方塊在a容器中(a容器邊框為紅色)

d方塊在b容器中(b容器邊框為綠色)

a b部分重疊,b在上層。

不做任何處理的話,c方塊永遠無法被點到,因為b把它蓋住了。

下面,我將給出一種方案,在不改變頁面結構的情況下,讓cd都能得到正常相應。

主要利用的是css中的pointer-events屬性

pointer-events:auto | none | visiblepainted | visiblefill | visiblestroke | visible | painted | fill | stroke | all

預設值:auto

適用於:所有元素

繼承性:有

動畫性:否

計算值:指定值

auto:

與pointer-events屬性未指定時的表現效果相同。在svg內容上與visiblepainted值相同

none:

元素永遠不會成為滑鼠事件的target。但是,當其後代元素的pointer-events屬性指定其他值時,滑鼠事件可以指向後代元素,在這種情況下,滑鼠事件將在捕獲或冒泡階觸發父元素的事件偵聽器。

其他值只能應用在svg上。

注意,這個屬性部分舊版瀏覽器可能不支援。

我注意到,設定為none之後,其子元素仍然可以通過顯式設定auto來響應滑鼠事件,那麼我們可以將a b容器都設定為none,不響應滑鼠事件,同時,將cd顯式設定為auto,讓他們響應滑鼠事件,這樣一來,b就不會擋住a了,下面是具體**

結果如下:

js 監聽事件的疊加和移除

html dom元素有很多on開頭的監聽事件,如onload onclick等,見dom事件列表。但是同一種事件,後面註冊的會覆蓋前面的 window.onresize function window.onresize function 改變視窗大小時,只會彈出2 利用addeventlistene...

js實現可拖拽的div

doctype html html lang en head meta charset utf 8 title zzw drap title style box bar content style head body div id box div id bar 可拖拽頭部 div div id co...

js自定義事件的簡單實現

在寫這段 之後,本人使用過jquery這個庫,一直對jquery的自定義事件有疑惑,就看了看jquery的原始碼,廓然開朗。jquery 實現和觸發自定義實現如下 jquery的定義方式 dom bind data change function jquery使用方式 dom trigger ini...