click點(diǎn)透

什么是click點(diǎn)透诗力?

核心代碼:
<div class="content">
<div id="underLayer">
<a href="www.baidu.com">鏈接</a>
<input type="text" class="text1" >
<input type="select" class="select">
<input type="radio" class="select">
<input type="checkbox" class="select">
<button class="btn" id="openPopup">彈出</button>
</div>
<div id="popupLayer">
<div class="layer-title">彈出層</div>
<div class="layer-action">
<button class="btn" id="closePopup">關(guān)閉</button>
</div>
</div>
</div>

<script type="text/javascript">

  var oPop =document.getElementById('popupLayer');
  var oUn = document.getElementById('underLayer');
  var oOpen = document.getElementById('openPopup');

  oPop.addEventListener('touchend', function(e){
      this.style.display='none';

     
  });

 oUn.addEventListener('click',
   function(){
      alert('1');
  } );

</script>

點(diǎn)擊彈出層捷兰,touch事件首先被觸發(fā)出革,彈出層和遮罩就被隱藏了贝或。touchend后繼續(xù)等待300ms發(fā)現(xiàn)沒有其他行為了,則繼續(xù)觸發(fā)click泼诱,由于這時(shí)彈出層已經(jīng)消失坛掠,所以當(dāng)前click事件的target就在底層元素上,于是就alert內(nèi)容治筒。整個(gè)事件觸發(fā)過程為 touchend -> click屉栓。
而由于click事件的滯后性(300ms),在這300ms內(nèi)上層元素隱藏或消失了耸袜,下層同樣位置的DOM元素觸發(fā)了click事件(如果是input框則會(huì)觸發(fā)focus事件友多,如果是<a>鏈接則會(huì)進(jìn)行頁(yè)面跳轉(zhuǎn),或是 select / radio / checkbox都會(huì)被觸發(fā))堤框,看起來就像點(diǎn)擊的target“穿透”到下層去了域滥。這就是點(diǎn)透現(xiàn)象

解決方法:
a、阻止默認(rèn)事件 e.preventDefault() 給touchend事

件加上 e.preventDefault()
oPop.addEventListener('touchend', function(e){
this.style.display='none';
e.preventDefault();
});

b蜈抓、利用css3屬性 pointer-events
取值auto|none
當(dāng)取值為auto 時(shí)启绰,效果和沒有定義 pointer-events 屬性相同,鼠標(biāo)不會(huì)穿透當(dāng)前層沟使。
當(dāng)取值為none 時(shí)委可,元素不再是鼠標(biāo)事件的目標(biāo),鼠標(biāo)不再監(jiān)聽當(dāng)前層而去監(jiān)聽下面的層中的元素腊嗡。但是如果它的子元素設(shè)置了pointer-events為其它值着倾,比如auto拾酝,鼠標(biāo)還是會(huì)監(jiān)聽這個(gè)子元素的。
詳細(xì)代碼:
oPop.addEventListener('touchend', function(e){
this.style.display='none';
oUn.style.pointerEvents='none';

    setTimeout(function(){
        oUn.style.pointerEvents='auto';
    }, 400);
  });

c. 遮擋
由于 click 事件的滯后性卡者,在這段時(shí)間內(nèi)原來點(diǎn)擊的元素消失了蒿囤,于是便“穿透”了。因此我們順著這個(gè)思路就想到崇决,可以給元素的消失做一個(gè)fade效果蟋软,類似jQuery里的fadeOut,并設(shè)置動(dòng)畫duration大于300ms嗽桩,這樣當(dāng)延遲的 click 觸發(fā)時(shí),就不會(huì)“穿透”到下方的元素了凄敢。
同樣的道理碌冶,不用延時(shí)動(dòng)畫,我們還可以在觸摸位置放一個(gè)透明的元素涝缝,這樣當(dāng)上層元素消失而延遲的click來到時(shí)扑庞,它點(diǎn)擊到的是那個(gè)透明的元素,也不會(huì)“穿透”到底下拒逮。在一定的timeout后再將生成的透明元素隱藏罐氨。代碼如下:

oPop.addEventListener('touchend', function(e){
oBg.style.display ='block';
this.style.display='none';

  // 解決方法三
  setTimeout(function(){
       oBg.style.display='none'
    }, 400);

     
  });

參考徹底理解和解決移動(dòng)WEB開發(fā)中CLICK點(diǎn)透問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滩援,隨后出現(xiàn)的幾起案子栅隐,更是在濱河造成了極大的恐慌,老刑警劉巖玩徊,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件租悄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恩袱,警方通過查閱死者的電腦和手機(jī)泣棋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔塔,“玉大人潭辈,你說我怎么就攤上這事〕憾郑” “怎么了把敢?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棚辽。 經(jīng)常有香客問我技竟,道長(zhǎng),這世上最難降的妖魔是什么屈藐? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任榔组,我火速辦了婚禮熙尉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搓扯。我一直安慰自己检痰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布锨推。 她就那樣靜靜地躺著铅歼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪换可。 梳的紋絲不亂的頭發(fā)上椎椰,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音沾鳄,去河邊找鬼慨飘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛译荞,可吹牛的內(nèi)容都是我干的瓤的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吞歼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼圈膏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篙骡,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稽坤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后医增,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慎皱,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年叶骨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茫多。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忽刽,死狀恐怖天揖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跪帝,我是刑警寧澤今膊,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站伞剑,受9級(jí)特大地震影響斑唬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一恕刘、第九天 我趴在偏房一處隱蔽的房頂上張望缤谎。 院中可真熱鬧,春花似錦褐着、人聲如沸坷澡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)频敛。三九已至,卻和暖如春馅扣,著一層夾襖步出監(jiān)牢的瞬間斟赚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工差油, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汁展,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓厌殉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親侈咕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子公罕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 移動(dòng)頁(yè)面點(diǎn)擊穿透問題解決方案 一.click與300ms延遲 移動(dòng)瀏覽器提供一個(gè)特殊的功能:雙擊(double t...
    程序員之路閱讀 3,822評(píng)論 0 2
  • 相關(guān)知識(shí)點(diǎn) 移動(dòng)端、 適配(兼容)耀销、 ios點(diǎn)擊事件300ms延遲楼眷、 點(diǎn)擊穿透、 定位失效...... 問題&解決...
    sandisen閱讀 25,502評(píng)論 3 67
  • AMD 和 CMD 的區(qū)別有哪些熊尉?AMD 是 RequireJS 在推廣過程中對(duì)模塊定義的規(guī)范化產(chǎn)出罐柳。CMD 是 ...
    竿牘閱讀 699評(píng)論 0 1
  • “我不知道結(jié)局,真的不知道狰住,我只是相信而已”张吉; 每個(gè)人都有夢(mèng)想,或大或写咧病肮蛹;每個(gè)人的心里,都藏著一個(gè)了不起的自己创南。只...
    你來不來我都在你在不在我都來閱讀 255評(píng)論 0 0
  • 每天都在證明自己的無(wú)能伦忠,人生中能有這樣的遭遇也是挺難得的。稿辙。昆码。 可惜我不是導(dǎo)演也不是編劇,無(wú)法把自己的經(jīng)歷記下來。...
    嘟嘟_7ccb閱讀 139評(píng)論 0 0