uni-app 拖动区域 movable-view 放大后拖拽到最右边无法显示最右边内容

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app 拖动区域 movable-view 放大后拖拽到最右边无法显示最右边内容

开发环境 版本号 项目创建方式
Windows win11 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win11

HBuilderX类型:正式

HBuilderX版本号:3.7.11

手机系统:Android

手机系统版本号:Android 11

手机厂商:华为

手机机型:HarmonyOS 2.0.0

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:

<movable-area class="marea" scale-area>  
    <movable-view class="mview" direction="all" scale scale-min="1" scale-max="6" :scale-value="1">  
        <image class="image" src="../static/uni.png" mode="widthFix" />  
    </movable-view>  
</movable-area>  
.marea {  
    width: 350px;  
    height: 700px;  
    overflow: hidden;  
    background-color: #5555ff;  
}  
.mview {  
    display: flex;  
    align-items: center;  
    justify-content: center;  
    width: 350px;  
    height: auto;  
    min-height: 100%;  
    background-color: #ffff7f;  
    overflow-x: scroll;  
}  
.image {  
    width: 100%;  
    background-color: #aaff00;  
}  

操作步骤:

  • 放大之后,一直拖拽到最右边

预期结果:

  • 拖拽到最右边时,可以显示最右边的内容

实际结果:

  • 没有显示最右边内容

bug描述:

  • 拖动区域movable-view 放大之后,拖拽到最右边,但显示不了最右边内容

示例.zip


1 回复

在使用 uni-appmovable-view 组件时,如果放大后拖拽到最右边无法显示最右边的内容,可能是由于 movable-area 的尺寸或 movable-view 的缩放比例设置不当导致的。以下是一些可能的解决方案:

1. 检查 movable-area 的尺寸

确保 movable-area 的宽度足够大,能够容纳放大后的 movable-view。如果 movable-area 的宽度不够,movable-view 在放大后可能会超出 movable-area 的边界,导致无法显示最右边的内容。

<movable-area style="width: 100%; height: 300px;">
  <movable-view style="width: 100px; height: 100px;" scale="true" scale-min="1" scale-max="3">
    <!-- 内容 -->
  </movable-view>
</movable-area>

2. 调整 movable-view 的缩放比例

如果 movable-view 的缩放比例过大,可能会导致内容超出 movable-area 的边界。可以尝试调整 scale-minscale-max 的值,确保 movable-view 在放大后仍然能够完全显示在 movable-area 内。

<movable-view style="width: 100px; height: 100px;" scale="true" scale-min="1" scale-max="2">
  <!-- 内容 -->
</movable-view>

3. 动态调整 movable-area 的尺寸

如果 movable-view 的尺寸是动态变化的,可以在 movable-view 放大时动态调整 movable-area 的尺寸,以确保 movable-view 的内容能够完全显示。

methods: {
  onScale(e) {
    const scale = e.detail.scale;
    this.areaWidth = 100 * scale; // 动态调整 movable-area 的宽度
  }
}
<movable-area :style="{ width: areaWidth + 'px', height: '300px' }">
  <movable-view style="width: 100px; height: 100px;" scale="true" scale-min="1" scale-max="3" @scale="onScale">
    <!-- 内容 -->
  </movable-view>
</movable-area>

4. 使用 out-of-bounds 属性

movable-view 提供了 out-of-bounds 属性,可以控制 movable-view 是否允许超出 movable-area 的边界。如果设置为 falsemovable-view 将不会超出 movable-area 的边界。

<movable-view style="width: 100px; height: 100px;" scale="true" scale-min="1" scale-max="3" out-of-bounds="false">
  <!-- 内容 -->
</movable-view>

5. 使用 xy 属性限制拖拽范围

可以通过 xy 属性来限制 movable-view 的拖拽范围,确保它不会超出 movable-area 的边界。

<movable-view style="width: 100px; height: 100px;" scale="true" scale-min="1" scale-max="3" :x="x" :y="y" @change="onChange">
  <!-- 内容 -->
</movable-view>
data() {
  return {
    x: 0,
    y: 0
  };
},
methods: {
  onChange(e) {
    const { x, y } = e.detail;
    this.x = Math.max(0, Math.min(x, this.areaWidth - this.viewWidth));
    this.y = Math.max(0, Math.min(y, this.areaHeight - this.viewHeight));
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!