小程序
小游戏
企业微信
微信支付
扫描小程序码分享
1.在canvas上绘制一张图片
2.监听canvas的touchmove,touchstart等事件
3.先双指操作放大和缩小图片,多操作几次
4.然后再单指移动图片,此时发现仍然在缩放,
5.我区分是移动还是缩放是根据e.touches的数组长度来判断的,单指的时候也就是在第四步的时候发现e.touches数组长度仍然是2
单指的时候e.touches的长度应该是1才正确吧?
9 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
请具体描述问题出现的流程,并提供能复现问题的简单代码片段https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
用出现问题的手机扫下面的小程序码,提供下扫码结果截图
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
都4年多了还没人修。这个问题居然没多少人碰到吗?先双指滑动,然后再单指滑动,此时单指的e.touches里面返回了两个数据就算了,连changeTouches永远只返回1个数据。真不知道该怎么办了。我看“图片编辑”这个小程序就规避了这个问题,不知道他们是怎么做到的。
我也知道怎么让单指滑动的touches重新变成返回一个。只要你双指操作一个滑动一个不动,就恢复了。
我都怀疑人生了,有解决这个问题的吗,微信官网是干什么的吃的,这种问题到现在还有
还没解决吗?我的情况是,用双指,e.touches一直返回1个数据。
马上2022年了这个问题解决了吗?
有解决的办法吗、也遇到了这个问题
问题依然存在。官方修复的怎么样了啊?
// 过滤触摸事件,目的是为了覆盖小程序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变现不一致
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
请具体描述问题出现的流程,并提供能复现问题的简单代码片段https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
用出现问题的手机扫下面的小程序码,提供下扫码结果截图
都4年多了还没人修。这个问题居然没多少人碰到吗?先双指滑动,然后再单指滑动,此时单指的e.touches里面返回了两个数据就算了,连changeTouches永远只返回1个数据。真不知道该怎么办了。我看“图片编辑”这个小程序就规避了这个问题,不知道他们是怎么做到的。
我也知道怎么让单指滑动的touches重新变成返回一个。只要你双指操作一个滑动一个不动,就恢复了。
我都怀疑人生了,有解决这个问题的吗,微信官网是干什么的吃的,这种问题到现在还有
还没解决吗?我的情况是,用双指,e.touches一直返回1个数据。
马上2022年了这个问题解决了吗?
有解决的办法吗、也遇到了这个问题
问题依然存在。官方修复的怎么样了啊?
// 过滤触摸事件,目的是为了覆盖小程序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变现不一致