w3ctech

【请教问题:移动】touch事件难以控制

各位大牛好,请教问小问题,最近在做移动项目发现关于touch事件的一些问题:

  1. 如果 触发了touchmove && 不阻止默认行为 ,touchEnd 无法被触发

  2. android浏览器 不阻止默认行为 时, touchmove 只会被触发一次【偶尔是两次】, ios可以连续触发,而且触发时机十分不准确;

有什么好的方法可以处理这些情况吗,或者一些js库也行;

ps: 我的应用场景是带 滚动条的页面,想在滚动过程中触发一些逻辑操作 ;

最后得到了一些结论: touchEnd 事件存在兼容性问题, 在4.0.X的机器,如果touchMove触发了,就不会触发thoucEnd, 要在 touchmove加上 event.preventDefault(); 如果不希望阻止默认滚动的话,看来是需要模拟滚动了诶.

w3ctech微信

扫码关注w3ctech微信公众号

共收到9条回复

  • 能不能改用监听scroll事件

    回复此楼
  • @lilyh: 谢谢您的回答。 scroll的触发是在 手指离开时,也就是相当于touchEnd 之后,而我希望的是在连续触摸移动时.. 所以scroll不好用诶..

    回复此楼
  • touchmove不preventDefault,也可以出发touchend的啊。。怎么会不行

    回复此楼
  • @奇遇 哦,是吗?难道是我测试的不够准确,我的手机上不行,PC的chrome模拟器是可以的...

    回复此楼
  • @奇遇 要不就是我的页面是需要发生滚动的哦,不发生滚动的时候会不会触发,这个我还真没测试过..呵呵,我再去看看

    回复此楼
  • 我下午刚刚才写过,iOS和安卓4.2+都没问题啊

    回复此楼
  • 第一个问题:正常情况下,touchmove时如果不调用preventDefault方法,touchend是可以被触发的。你再尝试一下。

    第二个:你把touchmove事件绑定到window试试。

    回复此楼
  • @webzhao 您好, 我刚才测试了下,还是不行, 我是 android4.1.2 UC9.8 , 绑定到window也不会进行连续触发 ; 而且产品要求兼容低端机...所以不能只考虑4.2+的; 还是多谢了。

    回复此楼
  • 最后得到了一些结论: touchEnd 事件存在兼容性问题,在4.0.X的机器,如果touchMove触发了,就不会触发thoucEnd, 要在 touchmove加上 event.preventDefault(); 看来某些情况下还是需要模拟滚动诶...

    回复此楼