摘要:问题描述将第三方触控库删掉使用原生事件后发现一个,具体表现为在中响应失效。经研究发现,在多次发出事件期间,重用了这个对象和里面对象,导致缓存被改动,无法正确记录历史数据。
问题描述
将第三方触控库删掉使用原生事件后发现一个 bug,具体表现为在 iOS Safari 中 touch 响应失效。
调试结果使用 Chrome 验证功能正常,打 log 发现业务代码中缓存了 targetTouches 属性,但是下一次 touchmove 事件到来时缓存的 targetTouches 被改变了,clientX 和 clientY 变为新值,导致无法正确计算手指滑动距离。经研究发现,Safari 在多次发出 touch 事件期间,重用了 event.targetTouches 这个 touchList 对象和里面 Touch 对象,导致缓存被改动,无法正确记录历史数据。
修正方案不缓存 targetTouches 属性,而是将关心的数据复制下来,演示代码如下:
this.lastTouches_ = map(evt.targetTouches, function(el) { return { clientX: el.clientX, clientY: el.clientY, }; });
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80630.html
摘要:在中与值是相等的,在微信中两个数值不等,但单位应该也不一样。测试过程中及微信内置浏览器都不支持这些属性,模拟器可以。也是一个对象,对于事件这个对象列出在此次事件中新增加的触点。 本文主要介绍 TouchEvent 相关的一些对象与属性如 Touch, TouchList, touhces, targetTouches 等,以及使用的注意点和误区。 触摸事件有以下几种类型:touchst...
阅读 2578·2021-11-23 09:51
阅读 808·2021-09-24 10:37
阅读 3565·2021-09-02 15:15
阅读 1943·2019-08-30 13:03
阅读 1862·2019-08-29 15:41
阅读 2584·2019-08-29 14:12
阅读 1383·2019-08-29 11:19
阅读 3278·2019-08-26 13:39