收藏
回答

movable-view不支持通过e.preventDefault()阻止滚动

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 需求 <movable-view> / <movable-area> 客户端 7.0.4 2.7.1

- 需求的场景描述(希望解决的问题)

在改变movable-view的x偏移且动画在执行的过程中,不希望用户的触摸干扰动画


- 希望提供的能力

组件内部实现movable-view组件的touchmove事件可以通过e.preventDefault()阻止生效

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

2 个回答

  • Junyi
    Junyi
    2021-07-21

    很简单的一个场景,movable-area 是整体的可滑动区域,但是在某些业务条件下要做到其中的 movable-view 不可以移动超过某些坐标(比如拼图、碰撞检测等),这时候完全没法阻止拖动。

    搞那么多问题出来,还不如自己实现一套。

    2021-07-21
    有用
    回复
  • 灵芝
    灵芝
    2019-06-11

    什么意思?麻烦具体描述一下场景

    2019-06-11
    有用
    回复 4
    • 皱凯凯凯凯
      皱凯凯凯凯
      2019-06-11

      有一个展现大量(数千计)图片的轮播需求,原生组件swiper大概最多只能同时渲染展示150左右的图片,因此模拟了一套移动视口的逻辑,视口只展示3张图片,自动播放/用户翻页动画完成时,更新视口包含的三张图片(模拟视口移动),发现swiper在视口图片发生变化时重新渲染组件会黑屏(WXML可以看到结构在但是没有渲染),猜测是不支持动态swiper-item。


      随即更换到movable-view组件(用view组件实现在touchmove响应用户移动时,动画巨卡)以解决动画卡顿问题。整个一套逻辑基本交互都没问题,但是在用户touchend的时候,代码会通过计算用户位移来判断当前显示图片的切换(这时会有动画过程,类似于swiper组件用户在翻页手指抬起时的动画定位过程)以及视口图片的内容,此时希望动画不被用户干扰,否则无法定位当前激活图片是哪张。


      大致场景如上,如果movable-view的touchmove事件的preventDefault能够生效(阻止用户触摸组件滚动),上述问题都可以解决

      2019-06-11
      1
      回复
    • rock
      rock
      2019-06-14回复皱凯凯凯凯

      你的意思是,用户在 touchend 的时候,动画开始滑动。如果用户在动画滑动的时候再次 touchmove touchend 导致了定位困难吗? 这个问题是不是可以限制一下,当动画在移动的时候,touchend 事件函数就什么也不执行,你这个需求我们需要先评估下。

      2019-06-14
      回复
    • 文举
      文举
      2019-07-15
      为什么不提供类似js的e.preventDefault() 为什么不支持动态阻止默认事件呢 ? 出于啥原因呀
      2019-07-15
      回复
    • 笔落诗成
      笔落诗成
      2019-12-24回复rock
      我也有类似的需求,我想要在监听 touchmove 事件时,允许阻止 touchmove 事件。e.preventDefault  e.stopPropagation() htouchmove 等方式尝试了,均无法实现
      2019-12-24
      回复
登录 后发表内容