移動端touch事件影響click事件以及在touchmove添加preventDefault導(dǎo)致頁面無法滾動的解決方法

這兩天自己在寫一個手機(jī)網(wǎng)頁,用到了觸屏滑動的特效轧房,就是往右滑動的時候左側(cè)隱藏的菜單從左邊劃出來先誉。

做完之后在手機(jī)原生瀏覽器中運(yùn)行正常湿刽,但在QQ和微信中打開,發(fā)現(xiàn)touchmove只會觸發(fā)一次褐耳,而且touchend也經(jīng)常不觸發(fā)诈闺。

之后百度了一下這個問題,原因是

主要是由于200ms超時導(dǎo)致內(nèi)核不一定會一直處理touchmove事件铃芦,一旦超時會將后續(xù)所有的事件轉(zhuǎn)交給UI處理雅镊,導(dǎo)致touchmove不會一直觸發(fā)襟雷。
為了解決開發(fā)者需要,建議開發(fā)者在touchstart時調(diào)用event.preventDefault仁烹,這樣就可以保證內(nèi)核會一起觸發(fā)touchmove事件了
耸弄。

地址:http://bbs.mb.qq.com/thread-201794-1-1.html

根據(jù)上面所說,在touchstart中添加了event.preventDefault()方法卓缰,在QQ和微信中果然正常了计呈。

但是!U骰!捌显!頁面中的超鏈接點(diǎn)擊沒反應(yīng)了!w⑼摇苇瓣!給其他地方加的click事件也不觸發(fā)了!3ス浴击罪!

之后繼續(xù)百度,得知當(dāng)在移動端上點(diǎn)擊屏幕時贪薪,會依次觸發(fā)touchstart,touchmove,touchend,click事件媳禁。

之后測試了一下,發(fā)現(xiàn)正確的觸發(fā)過程應(yīng)該是:touchstart→touchmove→touchend或者touchstart→touchend→click画切。

如果在點(diǎn)擊屏幕的時候手指滑動的話竣稽,是不會觸發(fā)click事件的。

參考地址:http://www.tuicool.com/articles/3QZ7jeV

上面說event.preventDefault()的方法霍弹,會阻止事件的默認(rèn)行為毫别。可以通過調(diào)用preventDefault()方法典格,可以阻止后面事件的觸發(fā)岛宦。

我知道event.preventDefault()會阻止a標(biāo)簽?zāi)J(rèn)的動作(跳轉(zhuǎn)到href指定的頁面),但是為什么click也不觸發(fā)了呢耍缴?

之后我大膽推測了一下:

會不會是因?yàn)樵谝苿佣薱lick事件的觸發(fā)條件就是必須touchstart和touchend同時觸發(fā)才能觸發(fā)click呢砾肺?
我在touchstart中調(diào)用了event.preventDefault方法,是不是讓瀏覽器誤以為沒有觸發(fā)touchstart事件防嗡,只觸發(fā)了touchend事件变汪,所以沒有觸發(fā)click事件呢?

之后我刪除了touchstart中的event.preventDefault方法蚁趁,果然超鏈接和click事件都觸發(fā)了裙盾,但是前面說的問題又出現(xiàn)了,在QQ和微信中touchmove和touchend又出問題了。

怎么辦呢闷煤?

后來突然腦袋靈光一閃童芹,既然在touchstart中加了event.preventDefault會導(dǎo)致不觸發(fā)click事件,那我在touchmove中加可以吧鲤拿?

抱著試一試的心態(tài),果然好了署咽,click能順利觸發(fā)近顷,QQ和微信中也沒有問題,我以為這樣就好了宁否,但是為什么頁面不能滾動了窒升?

原來touchmove中添加event.preventDefault方法之后會阻止瀏覽器默認(rèn)的滾動。慕匠。饱须。

所以頁面無法滾動了,之后又去找找找台谊,找了很久一直沒找到怎么解決這個問題蓉媳,突然想起之后用的一個移動端的圖片輪播插件,

為什么他們可以左右滑動锅铅,不影響click事件和a標(biāo)簽酪呻,也不影響頁面的滾動。

然后我打開了這個插件的源碼盐须,終于在touchmove中找到了答案

在touchmove中有這樣一段代碼(下面是我自己抄過來簡化過的):

var w = x<0?x*-1:x;     //x軸的滑動值
var h = y<0?y*-1:y;     //y軸的滑動值
if(w>h){                //如果是在x軸中滑動
   event.preventDefault();
}

就是在touchmove中判斷x軸和y軸的移動值玩荠,判斷當(dāng)前是往哪個方向滑動,如果是在x軸上滑動(左右)贼邓,就調(diào)用event.preventDefault()方法阶冈,如果是在y軸上滑動(上下),就不調(diào)用event.preventDefault()塑径。

然后測試一下女坑,QQ和微信中特效沒有問題,click事件和a標(biāo)簽鏈接也可以順利觸發(fā)晓勇,頁面滾動也沒有問題堂飞。

所有問題終于解決了。绑咱。

總結(jié)一下:

在QQ和微信(當(dāng)然還包括其他瀏覽器绰筛,不過我沒測試過)中如果有需要用到touch事件做的特效一定要在touchstart或者touchmove中添加event.preventDefault()方法。

在touchstart中如果有event.preventDefault()方法描融, 將不會觸發(fā)click事件和a標(biāo)簽方法铝噩。在這里可以使用tap代替click,但是a標(biāo)簽的話就不太方便了窿克。

如果在touchmove中有event.preventDefault()方法骏庸,最好加上方向判斷毛甲,當(dāng)然如果你頁面內(nèi)容不需要滾動條就不需要加判斷了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末具被,一起剝皮案震驚了整個濱河市玻募,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌一姿,老刑警劉巖七咧,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叮叹,居然都是意外死亡艾栋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門蛉顽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗砾,“玉大人,你說我怎么就攤上這事携冤〉苛福” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵噪叙,是天一觀的道長矮锈。 經(jīng)常有香客問我,道長睁蕾,這世上最難降的妖魔是什么苞笨? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮子眶,結(jié)果婚禮上瀑凝,老公的妹妹穿的比我還像新娘。我一直安慰自己臭杰,他們只是感情好粤咪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渴杆,像睡著了一般寥枝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磁奖,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天囊拜,我揣著相機(jī)與錄音,去河邊找鬼比搭。 笑死冠跷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜜托,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抄囚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了橄务?” 一聲冷哼從身側(cè)響起幔托,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仪糖,沒想到半個月后柑司,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锅劝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟆湖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片故爵。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隅津,靈堂內(nèi)的尸體忽然破棺而出诬垂,到底是詐尸還是另有隱情,我是刑警寧澤伦仍,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布结窘,位于F島的核電站,受9級特大地震影響充蓝,放射性物質(zhì)發(fā)生泄漏隧枫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一谓苟、第九天 我趴在偏房一處隱蔽的房頂上張望官脓。 院中可真熱鬧,春花似錦涝焙、人聲如沸卑笨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赤兴。三九已至,卻和暖如春隧哮,著一層夾襖步出監(jiān)牢的瞬間桶良,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工近迁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺普,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像歧譬,于是被迫代替她去往敵國和親岸浑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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