1.在canvas上绘制一张图片
2.监听canvas的touchmove,touchstart等事件
3.先双指操作放大和缩小图片,多操作几次
4.然后再单指移动图片,此时发现仍然在缩放,
5.我区分是移动还是缩放是根据e.touches的数组长度来判断的,单指的时候也就是在第四步的时候发现e.touches数组长度仍然是2
单指的时候e.touches的长度应该是1才正确吧?
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|
小程序 | Bug | canvas | 微信安卓客户端 | 7.0.12 | 2.10.3 |
1.在canvas上绘制一张图片
2.监听canvas的touchmove,touchstart等事件
3.先双指操作放大和缩小图片,多操作几次
4.然后再单指移动图片,此时发现仍然在缩放,
5.我区分是移动还是缩放是根据e.touches的数组长度来判断的,单指的时候也就是在第四步的时候发现e.touches数组长度仍然是2
单指的时候e.touches的长度应该是1才正确吧?
5 个回答
请具体描述问题出现的流程,并提供能复现问题的简单代码片段https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
用出现问题的手机扫下面的小程序码,提供下扫码结果截图
有解决的办法吗、也遇到了这个问题
问题依然存在。官方修复的怎么样了啊?
// 过滤触摸事件,目的是为了覆盖小程序Canvas返回的事件对象中touches数组不正确的问题 // NOTE: 但是该方法面对超过两点触摸的场景,可能会出现抖动问题,考虑到当前需求只用到两点触摸,暂时多点触摸作为非法输入考虑. // TODO: 期待更好的修复方法 getCanvasEvent(e) { console.log('e: ', e); if (e.changedTouches.length >= 1) { const base = e.changedTouches[0].identifier; const index = (e.touches || []).findIndex(i => i.identifier == base); let newTouches = []; if (index > 0 && e.touches[index - 1].identifier === base - 1) { newTouches.push(e.touches[index - 1]); } newTouches = newTouches.concat(e.touches.filter(i => i.identifier >= base)); return { ...e, touches: newTouches }; } else { return e; } }
重现情况是先双指滑动,然后再单指滑动,此时单指的e.touches里面返回了两个数据,这个跟html里面的canvas变现不一致