移動(dòng)端click延遲及zepto的穿透現(xiàn)象

穿透現(xiàn)象與click的延遲解決方法是分不開的捶闸,若要了解穿透現(xiàn)象,需要先了解click延遲的解決原理。

移動(dòng)端click事件300ms的延遲現(xiàn)象的原因:

在最早iphone的safar瀏覽器中,為了實(shí)現(xiàn)觸屏中雙擊放大效果,當(dāng)用戶點(diǎn)擊屏幕時(shí)后會(huì)判斷在300ms內(nèi)是否有第二次點(diǎn)擊暴备,如果有,就理解成雙擊们豌,若沒有就是單擊, 就會(huì)觸發(fā)click事件.

當(dāng)你點(diǎn)擊移動(dòng)設(shè)備的屏幕時(shí),?可以分解成多個(gè)事件涯捻,順序依次為:touchstart — touchmove — touchend — click, 這些事件是按順序依次觸發(fā)的.

解決延遲的思路:

touchstart touchend是沒有延遲的,可以在touchend時(shí)觸發(fā)用戶想要在click時(shí)觸發(fā)的事件.

zepto 解決click延遲的原理:

自定義tap事件玛痊,當(dāng)用戶點(diǎn)擊元素時(shí)汰瘫,touchend事件先發(fā)生, 當(dāng)touchend事件冒泡到document時(shí)觸發(fā)目標(biāo)元素綁定的tap事件

簡(jiǎn)單模擬zepto tap的實(shí)現(xiàn)方式(這里忽略touchstart與touchend的點(diǎn)擊位置的判斷):

// document元素上綁定touchend事件, 在touchend的事件處理函數(shù)中自定義tap事件, 當(dāng)點(diǎn)擊的目標(biāo)元素的touchend事件冒泡到document上時(shí), 觸發(fā)綁定在目標(biāo)元素上的tap事件

document.addEventListener('touchend', function(e) {

// 自定義tap事件

var evt = document.createEvent('Event');

evt.init(’tap’, true, true);

// 觸發(fā)綁定在目標(biāo)元素上的tap事件

e.target.dispatch(evt);

}, false);

---------------------------------------------------------------------------------------------------------

// 用戶綁定tap事件

document.getElementById(‘elementid’).addEventListener('tap’, function(e) {

// click事件邏輯

}, false);

zepto的tap穿透現(xiàn)象:

遮罩層中有一個(gè)標(biāo)簽綁定了tap事件,觸發(fā)時(shí)遮罩層消失擂煞,該標(biāo)簽正下方有一個(gè)綁定了click的按鈕混弥,此時(shí)點(diǎn)擊上層的標(biāo)簽,同時(shí)也會(huì)觸發(fā)下層元素的click事件对省,出現(xiàn)穿透的現(xiàn)象蝗拿。

為什么會(huì)出現(xiàn)穿透:

結(jié)合前面tap事件的原理來(lái)分析:

當(dāng)觸發(fā)tap事件,上層遮罩層關(guān)閉后蒿涎,此時(shí)事件只進(jìn)行到touchend哀托,而click是在大概300ms后才觸發(fā),當(dāng)click觸發(fā)時(shí)劳秋,上面的遮罩層已消失仓手,就相當(dāng)于點(diǎn)擊到了下層的元素。

下層什么樣的元素才會(huì)形成穿透:

根據(jù)原理來(lái)說玻淑,因?yàn)榇┩甘前l(fā)生在click發(fā)生時(shí)嗽冒,也就是下層綁定了click事件或click時(shí)會(huì)觸發(fā)的事件(focus focusout)的元素,或點(diǎn)擊時(shí)有默認(rèn)形為的標(biāo)簽元素补履,如a input(會(huì)出系統(tǒng)鍵盤的type類型或綁定了focus事件)等添坊。

如何解決穿透:

方法一:直接將上層元素的tap事件換成click事件(會(huì)出現(xiàn)300ms的延遲觸發(fā)事件)

方法二:在click事件觸發(fā)前阻止它,如在touchend的事件中使用e.preventDefault()來(lái)阻止后續(xù)的click事件

zepto為何不使用e.preventDefault()來(lái)解決穿透問題箫锤?

因?yàn)閦epto的tap事件統(tǒng)一是在document的touchend時(shí)觸發(fā)的贬蛙,若在這里使用e.preventDefault()雨女,那頁(yè)面上所有元素在touchend后觸發(fā)的事件都不會(huì)被執(zhí)行了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阳准,一起剝皮案震驚了整個(gè)濱河市氛堕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖寝受,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡膝昆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門贷腕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惹苗,“玉大人,你說我怎么就攤上這事规婆±教桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵抒蚜,是天一觀的道長(zhǎng)掘鄙。 經(jīng)常有香客問我,道長(zhǎng)嗡髓,這世上最難降的妖魔是什么操漠? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮饿这,結(jié)果婚禮上浊伙,老公的妹妹穿的比我還像新娘。我一直安慰自己长捧,他們只是感情好嚣鄙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著串结,像睡著了一般哑子。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肌割,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天卧蜓,我揣著相機(jī)與錄音,去河邊找鬼声功。 笑死烦却,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的先巴。 我是一名探鬼主播其爵,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼冒冬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了摩渺?” 一聲冷哼從身側(cè)響起简烤,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摇幻,沒想到半個(gè)月后横侦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绰姻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年枉侧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狂芋。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榨馁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帜矾,到底是詐尸還是另有隱情翼虫,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布屡萤,位于F島的核電站珍剑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏死陆。R本人自食惡果不足惜招拙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翔曲。 院中可真熱鬧迫像,春花似錦、人聲如沸瞳遍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掠械。三九已至由缆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猾蒂,已是汗流浹背均唉。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肚菠,地道東北人舔箭。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親层扶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箫章,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 以前聽到前輩們說移動(dòng)端盡量不要使用click,click會(huì)比較遲鈍镜会,能用touchstart還是用touchsta...
    極樂君閱讀 645評(píng)論 0 2
  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined檬寂、Nul...
    極樂君閱讀 5,498評(píng)論 0 106
  • liusihao 2016-12-21 移動(dòng)端click 事件延遲300ms 一般情況下,如果沒有經(jīng)過特殊處理戳表,移...
    c563f88c16ec閱讀 22,140評(píng)論 2 34
  • 讀初中的時(shí)候就看過獨(dú)木舟的《深海里的星星》桶至,那個(gè)時(shí)候被獨(dú)木舟的文字驚艷,贊嘆她的才華匾旭,依稀還記得每天晚上打著手電筒...
    貍貓啊閱讀 246評(píng)論 0 3
  • 首先心里得有一個(gè)“終”镣屹,才知道應(yīng)該怎么“始”。 第一:確立一個(gè)目標(biāo)价涝,然后堅(jiān)定不移的追尋目標(biāo) 第二:認(rèn)定目標(biāo)野瘦,為其設(shè)...
    Fineyoga智慧閱讀 245評(píng)論 0 3