要理解事件雙重觸發先要明白什么是事件穿透,所謂事件穿透就是利用click事件在移動設備上觸發有300ms左右延遲的特性,我們可以在touchstart事件中快速移除當前層元素,讓事件短時間內穿透到下層從而觸發下層的click動畫,請參考下圖示意。
<!-- 事件穿透 -->
<svg style="height:0;">
<rect>
<animate
attributeName="opacity"
to="0"
begin="click"
dur="1s">
</animate>
</rect>
</svg>
<svg>
<rect>
<animate
attributeName="visibility"
to="hidden"
begin="touchstart"
dur="0.001ms">
</animate>
</rect>
</svg>
<svg>
<!-- 伸長動畫 -->
<animate
attributeName="width"
values="100%;100%;200%"
begin="touchstart"
fill="freeze"
dur="0.75s"
></animate>
<!-- 返回動畫 -->
<animate
attributeName="width"
values="200%;100%;100%"
begin="click"
fill="freeze"
dur="0.75s"
></animate>
</svg>
當我們將這2段開關動畫寫在一起時,我們會發現系統只選擇touchstart事件動畫執行而選擇性忽略了click事件動畫,這是因為touchstart沒有click事件的延遲,這就好比2個人前后腳到蛋糕店買蛋糕,而這時蛋糕店只剩下一塊蛋糕,老板自然是會給先到店的那個人。