click點透bug有一個特定的產生狀況:css
當上層元素是tap事件,且tap後消失,下層元素是click事件。這個時候,tap上層元素的時候就會觸發下層元素的click事件html
如下狀況,在B元素上有半透明灰色色遮蓋層C,黃色B元素內有可點擊連接A
ide
上下層都是tap事件,缺點:a標籤等元素自己就是自帶的click事件,更改成tap比較困難動畫
緩動動畫,讓上層元素消失的時候不要瞬間消失,而是以動畫的形式消失,事件超過300ms就能夠了ui
使用中間層,添加一個透明的中間元素,給它添加click事件並消失,這個時候接收點透的是透明的中間層this
使用fastclickcode
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #a,#b{ width: 100px; height: 80px; background: blue; float: left; } #a{ background: red; } #zhe{ width: 100%; height: 100px; background: rgba(0,0,0,0.3); position: absolute; top: 0; left: 0; z-index: 1000; } #zj{ width: 100%; height: 100px; background: rgba(0,0,0,0); position: absolute; top: 0; left: 0; } </style> </head> <body> <div id="a"></div> <div id="b"></div> <div id="zj"></div> <div id="zhe"></div> </body> <script src="https://cdn.bootcss.com/fastclick/1.0.6/fastclick.min.js"></script> <script src="./zepto.js"></script> <script> //利用fastclick解決點透問題 // $(function(){ // FastClick.attach(document.body); // $("#zhe").tap(function(){ // $(this).hide(); // }) // $("#a").click(function(){ // $(this).css("background","blue") // }) // }) //兩個都用tag事件 // $(function(){ // $("#zhe").tap(function(){ // $(this).hide(); // }) // $("#a").tag(function(){ // $(this).css("background","blue") // }) // }) //緩衝動畫 // $(function(){ // $("#zhe").tap(function(){ // setTimeout(function(){ // $(this).hide(); // }.bind(this),300) // }) // $("#a").click(function(){ // $(this).css("background","blue") // }) // }) //加中間層,點透的時候觸發中間層的click事件 $(function(){ $("#zhe").tap(function(){ // setTimeout(function(){ $(this).hide(); // }.bind(this),300) }) $("#zj").click(function(){ $(this).hide() }) $("#a").click(function(){ $(this).css("background","blue") }) }) </script> </html>