移動(dòng)端300ms延遲原因

移動(dòng)端300ms延遲原因

2007 年初踏志。蘋(píng)果公司在發(fā)布首款 iPhone 前夕,遇到一個(gè)問(wèn)題:當(dāng)時(shí)的網(wǎng)站都是為大屏幕設(shè)備所設(shè)計(jì)的胀瞪。于是蘋(píng)果的工程師們做了一些約定针余,應(yīng)對(duì) iPhone 這種小屏幕瀏覽桌面端站點(diǎn)的問(wèn)題饲鄙。

雙擊縮放(double tap to zoom),這也是會(huì)有上述 300 毫秒延遲的主要原因圆雁。雙擊縮放忍级,即用手指在屏幕上快速點(diǎn)擊兩次,iOS 自帶的 Safari 瀏覽器會(huì)將網(wǎng)頁(yè)縮放至原始比例伪朽。

假定這么一個(gè)場(chǎng)景轴咱。用戶(hù)在 iOS Safari 里邊點(diǎn)擊了一個(gè)鏈接。由于用戶(hù)可以進(jìn)行雙擊縮放或者單擊跳轉(zhuǎn)的操作烈涮,當(dāng)用戶(hù)一次點(diǎn)擊屏幕之后朴肺,瀏覽器并不能立刻判斷用戶(hù)是確實(shí)要打開(kāi)這個(gè)鏈接,還是想要進(jìn)行雙擊操作坚洽。因此戈稿,iOS Safari 就等待 300 毫秒,以判斷用戶(hù)是否再次點(diǎn)擊了屏幕讶舰。 鑒于iPhone的成功鞍盗,其他移動(dòng)瀏覽器都復(fù)制了 iPhone Safari 瀏覽器的多數(shù)約定,包括雙擊縮放跳昼,幾乎現(xiàn)在所有的移動(dòng)端瀏覽器都有這個(gè)功能橡疼。

解決方案

1.faskclick https://github.com/ftlabs/fastc

  • 原理: 在檢測(cè)到touchend事件的時(shí)候,會(huì)通過(guò)DOM自定義事件立即出發(fā)模擬一個(gè)click事件庐舟,并把瀏覽器在300ms之后真正的click事件阻止掉
  • 缺點(diǎn): 腳本相對(duì)較大, 不建議使用

2.禁用瀏覽器縮放

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

表明這個(gè)頁(yè)面是不可縮放的欣除,那雙擊縮放的功能就沒(méi)有意義了,此時(shí)瀏覽器可以禁用默認(rèn)的雙擊縮放行為并且去掉300ms的點(diǎn)擊延遲挪略。 這個(gè)方案有一個(gè)缺點(diǎn)历帚,就是必須通過(guò)完全禁用縮放來(lái)達(dá)到去掉點(diǎn)擊延遲的目的,然而完全禁用縮放并不是我們的初衷杠娱,我們只是想禁掉默認(rèn)的雙擊縮放行為挽牢,這樣就不用等待300ms來(lái)判斷當(dāng)前操作是否是雙擊。但是通常情況下摊求,我們還是希望頁(yè)面能通過(guò)雙指縮放來(lái)進(jìn)行縮放操作禽拔,比如放大一張圖片,放大一段很小的文字室叉。

3.更改默認(rèn)的視口寬度

<meta name="viewport" content="width=device-width">

一開(kāi)始睹栖,因?yàn)殡p擊縮放主要是用來(lái)改善桌面站點(diǎn)在移動(dòng)端瀏覽體驗(yàn)的。 隨著發(fā)展現(xiàn)在都是專(zhuān)門(mén)為移動(dòng)開(kāi)發(fā)專(zhuān)門(mén)的站點(diǎn)茧痕,這個(gè)時(shí)候就不需要雙擊縮放了野来,所以移動(dòng)端瀏覽器就可以自動(dòng)禁掉默認(rèn)的雙擊縮放行為并且去掉300ms的點(diǎn)擊延遲。如果設(shè)置了上述meta標(biāo)簽踪旷,那瀏覽器就可以認(rèn)為該網(wǎng)站已經(jīng)對(duì)移動(dòng)端做過(guò)了適配和優(yōu)化曼氛,就無(wú)需雙擊縮放操作了豁辉。 這個(gè)方案相比方案一的好處在于,它沒(méi)有完全禁用縮放舀患,而只是禁用了瀏覽器默認(rèn)的雙擊縮放行為徽级,但用戶(hù)仍然可以通過(guò)雙指縮放操作來(lái)縮放頁(yè)面。

4.通過(guò) touchstart 和 touchend模擬實(shí)現(xiàn)

能不能直接touchstart代替click呢聊浅,
答案是不能餐抢,使用touchstart去代替click事件有兩個(gè)不好的地方。
第一:touchstart是手指觸摸屏幕就觸發(fā)狗超,有時(shí)候用戶(hù)只是想滑動(dòng)屏幕,卻觸發(fā)了touchstart事件朴下,這不是我們想要的結(jié)果努咐;
第二:使用touchstart事件在某些場(chǎng)景下可能會(huì)出現(xiàn)點(diǎn)擊穿透的現(xiàn)象。

什么是點(diǎn)擊穿透殴胧?
假如頁(yè)面上有兩個(gè)元素A和B渗稍。B元素在A元素之上。我們?cè)贐元素的touchstart事件上注冊(cè)了一個(gè)回調(diào)函數(shù)团滥,該回調(diào)函數(shù)的作用是隱藏B元素竿屹。我們發(fā)現(xiàn),當(dāng)我們點(diǎn)擊B元素灸姊,B元素被隱藏了拱燃,隨后,A元素觸發(fā)了click事件力惯。

這是因?yàn)樵谝苿?dòng)端瀏覽器碗誉,事件執(zhí)行的順序是touchstart > touchend > click。而click事件有300ms的延遲父晶,當(dāng)touchstart事件把B元素隱藏之后哮缺,隔了300ms,瀏覽器觸發(fā)了click事件甲喝,但是此時(shí)B元素不見(jiàn)了磷醋,所以該事件被派發(fā)到了A元素身上狰闪。如果A元素是一個(gè)鏈接,那此時(shí)頁(yè)面就會(huì)意外地跳轉(zhuǎn)。 任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處器联。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甸饱,隨后出現(xiàn)的幾起案子耕皮,更是在濱河造成了極大的恐慌,老刑警劉巖谊惭,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽馋,死亡現(xiàn)場(chǎng)離奇詭異侮东,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)豹芯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)悄雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人铁蹈,你說(shuō)我怎么就攤上這事宽闲。” “怎么了握牧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵容诬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沿腰,道長(zhǎng)览徒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任颂龙,我火速辦了婚禮习蓬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘措嵌。我一直安慰自己躲叼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布企巢。 她就那樣靜靜地躺著枫慷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浪规。 梳的紋絲不亂的頭發(fā)上流礁,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音罗丰,去河邊找鬼神帅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萌抵,可吹牛的內(nèi)容都是我干的找御。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绍填,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霎桅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讨永,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滔驶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卿闹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體揭糕,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萝快,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了著角。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揪漩。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吏口,靈堂內(nèi)的尸體忽然破棺而出奄容,到底是詐尸還是另有隱情,我是刑警寧澤产徊,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布昂勒,位于F島的核電站,受9級(jí)特大地震影響舟铜,放射性物質(zhì)發(fā)生泄漏戈盈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一深滚、第九天 我趴在偏房一處隱蔽的房頂上張望奕谭。 院中可真熱鬧涣觉,春花似錦痴荐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膝宁,卻和暖如春鸦难,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背员淫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工合蔽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人介返。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓拴事,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親圣蝎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刃宵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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