movable-area

movable-view 的可移动区域

平台差异说明

5+AppH5微信小程序支付宝小程序百度小程序头条小程序
x

属性说明

属性名类型默认值说明
scale-areaBooleanfalse当里面的 movable-view 设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个 movable-area

注意:movable-area 必须设置 width 和 height 属性,不设置默认为 10px

  • movable-area app-nvue平台 暂不支持手势缩放

movable-view

可移动的视图容器,在页面中可以拖拽滑动

平台差异说明

5+AppH5微信小程序支付宝小程序百度小程序头条小程序
x

属性说明

属性名类型默认值说明平台差异说明
directionStringnonemovable-view的移动方向,属性值有all、vertical、horizontal、none
inertiaBooleanfalsemovable-view是否带有惯性微信小程序、5+App、H5、百度小程序
out-of-boundsBooleanfalse超过可移动区域后,movable-view是否还可以移动微信小程序、5+App、H5、百度小程序
xNumber / String定义x轴方向的偏移,如果x的值不在可移动范围内,会自动移动到可移动范围;改变x的值会触发动画
yNumber / String定义y轴方向的偏移,如果y的值不在可移动范围内,会自动移动到可移动范围;改变y的值会触发动画
dampingNumber20阻尼系数,用于控制x或y改变时的动画和过界回弹的动画,值越大移动越快微信小程序、5+App、H5、百度小程序
frictionNumber2摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于0,否则会被设置成默认值微信小程序、5+App、H5、百度小程序
disabledBooleanfalse是否禁用
scaleBooleanfalse是否支持双指缩放,默认缩放手势生效区域是在movable-view内微信小程序、5+App、H5
scale-minNumber0.5定义缩放倍数最小值微信小程序、5+App、H5
scale-maxNumber10定义缩放倍数最大值微信小程序、5+App、H5
scale-valueNumber1定义缩放倍数,取值范围为 0.5 - 10微信小程序、5+App、H5
animationBooleantrue是否使用动画微信小程序、5+App、H5、百度小程序
@changeEventHandle拖动过程中触发的事件,event.detail = {x: x, y: y, source: source},其中source表示产生移动的原因,值可为touch(拖动)、touch-out-of-bounds(超出移动范围)、out-of-bounds(超出移动范围后的回弹)、friction(惯性)和空字符串(setData)
@scaleEventHandle缩放过程中触发的事件,event.detail = {x: x, y: y, scale: scale},微信小程序、5+App、H5、百度小程序

除了基本事件外,movable-view提供了两个特殊事件

类型触发条件
htouchmove初次手指触摸后移动为横向的移动,如果catch此事件,则意味着touchmove事件也被catch
vtouchmove初次手指触摸后移动为纵向的移动,如果catch此事件,则意味着touchmove事件也被catch

movable-view 必须设置width和height属性,不设置默认为10px

movable-view 默认为绝对定位,top和left属性为0px

当movable-view小于movable-area时,movable-view的移动范围是在movable-area内;当movable-view大于movable-area时,movable-view的移动范围必须包含movable-area(x轴方向和y轴方向分开考虑)

Tips

  • movable-view必须在<movable-area/>组件中,并且必须是直接子节点,否则不能移动。
  • 如果遇到x、y、scale属性设置不生效的问题参考:组件属性设置不生效解决办法
  • swiper在非H5端,不支持内嵌video、map等原生组件。更新:微信基础库2.4.4起支持了原生组件在 scroll-view、swiper、movable-view 中的使用示例
  1. <template>
  2. <view class="page-body">
  3. <view class="uni-padding-wrap uni-common-mt">
  4. <view class="uni-title uni-common-mt">
  5. 示例 1
  6. <text>\nmovable-view 区域小于 movable-area</text>
  7. </view>
  8. <movable-area>
  9. <movable-view :x="x" :y="y" direction="all" @change="onChange">text</movable-view>
  10. </movable-area>
  11. <view @tap="tap" class="uni-link uni-center uni-common-mt">
  12. 点击这里移动至 (30px, 30px)
  13. </view>
  14. <view class="uni-title uni-common-mt">
  15. 示例 2
  16. <text>\nmovable-view区域大于movable-area</text>
  17. </view>
  18. <movable-area>
  19. <movable-view class="max" direction="all">text</movable-view>
  20. </movable-area>
  21. </view>
  22. </view>
  23. </template>
  1. export default {
  2. data() {
  3. return {
  4. x: 0,
  5. y: 0,
  6. old: {
  7. x: 0,
  8. y: 0
  9. }
  10. }
  11. },
  12. methods: {
  13. tap: function(e) {
  14. this.x = this.old.x
  15. this.y = this.old.y
  16. this.$nextTick(function() {
  17. this.x = 30
  18. this.y = 30
  19. })
  20. },
  21. onChange: function(e) {
  22. this.old.x = e.detail.x
  23. this.old.y = e.detail.y
  24. }
  25. }
  26. }

uni


发现错误?想参与编辑?在 GitHub 上编辑此页面!