收藏
回答

在canvas上进行双指缩放操作e.touches返回的数组有时候不准确

框架类型 问题类型 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才正确吧?

回答关注问题邀请回答
收藏

9 个回答

  • 疯狂的小辣椒
    疯狂的小辣椒
    2020-03-16

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    用出现问题的手机扫下面的小程序码,提供下扫码结果截图

    2020-03-16
    有用 1
    回复 17
    • lose
      lose
      2020-03-16
      代码链接https://developers.weixin.qq.com/s/EubYYTm47ZfA
      2020-03-16
      回复
    • lose
      lose
      2020-03-16
      2020-03-16
      回复
    • lose
      lose
      2020-03-16
      在真机运行代码片段,先双指滑动,查看console出来的手指个数正确,然后再单指滑动,发现手指个数还是2,难道判断手指个数不是用e.touches的length?
      2020-03-16
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2020-03-16回复lose
      收到,我们看下,有进展再同步
      2020-03-16
      回复
    • Miracle
      Miracle
      2020-05-09
      解决了吗,也遇到同样的问题
      2020-05-09
      回复
    查看更多(12)
  • 天谴丶之月
    天谴丶之月
    02-19

    都4年多了还没人修。这个问题居然没多少人碰到吗?先双指滑动,然后再单指滑动,此时单指的e.touches里面返回了两个数据就算了,连changeTouches永远只返回1个数据。真不知道该怎么办了。我看“图片编辑”这个小程序就规避了这个问题,不知道他们是怎么做到的。

    我也知道怎么让单指滑动的touches重新变成返回一个。只要你双指操作一个滑动一个不动,就恢复了。

    02-19
    有用
    回复 1
  • duxapp
    duxapp
    01-22

    我都怀疑人生了,有解决这个问题的吗,微信官网是干什么的吃的,这种问题到现在还有

    01-22
    有用
    回复
  • 神经蛙
    神经蛙
    2022-12-15

    还没解决吗?我的情况是,用双指,e.touches一直返回1个数据。

    2022-12-15
    有用
    回复
  • Wkens
    Wkens
    2021-12-21

    马上2022年了这个问题解决了吗?

    2021-12-21
    有用
    回复 2
    • 晚安
      晚安
      2022-07-18
      怕是2023年这个问题也得不到解决
      2022-07-18
      回复
    • 天谴丶之月
      天谴丶之月
      02-19回复晚安
      2024了,问题还是没解决
      02-19
      回复
  • 12345
    12345
    2020-10-14

    有解决的办法吗、也遇到了这个问题

    2020-10-14
    有用
    回复
  • 宝城
    宝城
    2020-09-06

    问题依然存在。官方修复的怎么样了啊?

    2020-09-06
    有用
    回复
  • @我是一个火头兵@
    @我是一个火头兵@
    2020-06-28
    // 过滤触摸事件,目的是为了覆盖小程序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;
      }
    }
    
    2020-06-28
    有用
    回复 1
    • duxapp
      duxapp
      01-22
      这好像没啥用呀
      01-22
      回复
  • lose
    lose
    2020-03-15

    重现情况是先双指滑动,然后再单指滑动,此时单指的e.touches里面返回了两个数据,这个跟html里面的canvas变现不一致

    2020-03-15
    有用
    回复
登录 后发表内容
问题标签