移動(dòng)端Click300毫秒點(diǎn)擊延遲

1. 300ms延遲的產(chǎn)生緣由

移動(dòng)端瀏覽器的默認(rèn)顯示寬度是980px(不同機(jī)型各異,但相差不大)侄柔,而不是屏幕的寬度(320px或其他)梯影。為了對(duì)早期普通網(wǎng)頁(yè)更好的體驗(yàn),iphone設(shè)計(jì)了雙擊放大顯示的功能--這就是300ms延遲的來(lái)源:如果用戶一次點(diǎn)擊后300ms內(nèi)沒有其他操作领舰,則認(rèn)為是個(gè)單擊行為;否則為雙擊放大行為迟螺。

2. 點(diǎn)透行為

假設(shè)有兩個(gè)層級(jí)冲秽,A和B;A在上面矩父,B在下面锉桑。 如果A監(jiān)聽touch事件(zepto的tap事件),而且B上有個(gè)鏈接(或者監(jiān)聽click事件)窍株,那么當(dāng)touch A后民轴,先后觸發(fā)了touchStart和touchEnd事件,touchEnd后A層隱藏球订,而此刻會(huì)觸發(fā)在document最前面B的click事件后裸;這就是點(diǎn)透行為。

3. 解決方法

  1. 設(shè)置不能縮放:user-scalable=no冒滩。 不能縮放就不會(huì)有雙擊縮放操作微驶,因此click事件也就沒了300ms延遲,這個(gè)是Chrome首先在Android中提出的开睡。
  2. 設(shè)置顯示寬度:width=device-width因苹。Chrome 開發(fā)團(tuán)隊(duì)不久前宣布,在 Chrome 32 這一版中篇恒,他們將在包含 width=device-width 或者置為比 viewport 值更小的頁(yè)面上禁用雙擊縮放扶檐。當(dāng)然,沒有雙擊縮放就沒有 300 毫秒點(diǎn)擊延遲婚度。
  3. IE的指針事件 (Pointer Events):設(shè)置touch-action:none蘸秘,根據(jù)規(guī)范,touch-action 屬性決定 “是否觸摸操作會(huì)觸發(fā)用戶代理的默認(rèn)行為蝗茁。這包括但不限于雙指縮放等行為”醋虏。
    從實(shí)際應(yīng)用的角度來(lái)看,touch-action決定了用戶在點(diǎn)擊了目標(biāo)元素之后哮翘,是否能夠進(jìn)行雙指縮放或者雙擊縮放颈嚼。因此,這也相當(dāng)完美地解決了 300 毫秒點(diǎn)擊延遲的問(wèn)題饭寺。

鑒于上述的3種解決方案阻课,現(xiàn)在較為通用的meta設(shè)置為:

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

4. 現(xiàn)在的流行解決方案:

上述的3種解決方案可以解決Chrome Android和IE10+下的300ms問(wèn)題叫挟,但是對(duì)其他瀏覽器還需要特定的解決方案。

  1. 指針事件的 polyfill
    指針事件的 polyfill 比較多限煞,以下列出比較流行的幾個(gè)抹恳。Google 的 Polymer,微軟的 HandJS@Rich-HarrisPoints
  2. FastClick
    FastClickFT Labs 專門為解決移動(dòng)端瀏覽器 300 毫秒點(diǎn)擊延遲問(wèn)題所開發(fā)的一個(gè)輕量級(jí)的庫(kù)署驻。簡(jiǎn)而言之奋献,F(xiàn)astClick 在檢測(cè)到 touchend事件的時(shí)候,會(huì)通過(guò) DOM 自定義事件立即觸發(fā)一個(gè)模擬click事件旺上,并把瀏覽器在 300 毫秒之后真正觸發(fā)的 click事件阻止掉瓶蚂。

5. FastClick

現(xiàn)階段FastClick被更多使用,借助它通過(guò)監(jiān)聽click事件宣吱,即可消除300ms的問(wèn)題窃这。
通過(guò)閱讀源碼可知:

  1. FastClick通過(guò)判斷瀏覽器類型決定其是不是需要執(zhí)行,下面幾種場(chǎng)景下不會(huì)執(zhí)行FastClick邏輯:
  • 不支持ontouchstart事件的瀏覽器
  • Android Chrome 或者 firefox27以上 設(shè)置了user-scalable="no"
  • 滿足特定要求的 IE10+ 瀏覽器
  • 部分黑莓瀏覽器
  1. 注冊(cè)了touchStart征候、touchEnd等事件杭攻,監(jiān)聽touchStart決定事件對(duì)象的target、時(shí)間倍奢、位置等信息朴上;通過(guò)touchEnd得到touch的結(jié)束時(shí)間垒棋。如果touch時(shí)長(zhǎng)大于700ms卒煞,則是長(zhǎng)按事件;如果連續(xù)兩次touchEnd的時(shí)間間隔小于200ms叼架,那么認(rèn)定為快速點(diǎn)擊畔裕,特殊對(duì)待;排除上面兩張情況乖订,就通過(guò)clickEvent = document.createEvent('MouseEvents'); initMouseEvent; dispatchEvent手動(dòng)觸發(fā)click事件扮饶。

參考文章

  1. 移動(dòng)端Click300毫秒點(diǎn)擊延遲的來(lái)龍去脈(轉(zhuǎn))
  2. ftlabs/fastclick
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乍构,隨后出現(xiàn)的幾起案子甜无,更是在濱河造成了極大的恐慌,老刑警劉巖哥遮,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岂丘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡眠饮,警方通過(guò)查閱死者的電腦和手機(jī)奥帘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仪召,“玉大人寨蹋,你說(shuō)我怎么就攤上這事松蒜。” “怎么了已旧?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵秸苗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我运褪,道長(zhǎng)难述,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任吐句,我火速辦了婚禮胁后,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗦枢。我一直安慰自己攀芯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布文虏。 她就那樣靜靜地躺著侣诺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氧秘。 梳的紋絲不亂的頭發(fā)上年鸳,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音丸相,去河邊找鬼搔确。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灭忠,可吹牛的內(nèi)容都是我干的膳算。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼弛作,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涕蜂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起映琳,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤机隙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萨西,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體有鹿,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年原杂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了印颤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡穿肄,死狀恐怖年局,靈堂內(nèi)的尸體忽然破棺而出际看,到底是詐尸還是另有隱情,我是刑警寧澤矢否,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布仲闽,位于F島的核電站,受9級(jí)特大地震影響僵朗,放射性物質(zhì)發(fā)生泄漏赖欣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一验庙、第九天 我趴在偏房一處隱蔽的房頂上張望顶吮。 院中可真熱鬧,春花似錦粪薛、人聲如沸悴了。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湃交。三九已至,卻和暖如春藤巢,著一層夾襖步出監(jiān)牢的瞬間搞莺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工掂咒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留才沧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓俏扩,卻偏偏與公主長(zhǎng)得像糜工,于是被迫代替她去往敵國(guó)和親弊添。 傳聞我的和親對(duì)象是個(gè)殘疾皇子录淡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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