【愚公系列】《微信小程序与云开发从入门到实践》013-可拖曳容器组件

举报
愚公搬代码 发表于 2024/11/30 23:59:52 2024/11/30
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。博客内容.NET、...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在现代应用开发中,用户交互的灵活性和直观性越来越受到重视。微信小程序的可拖曳容器组件正是为了满足这一需求而设计的,它允许用户通过简单的拖动操作,自由调整内容的位置和布局。这种交互方式不仅提升了用户体验,还为开发者提供了更多的创意空间,帮助他们创建更加动态和个性化的应用。

本篇文章将深入探讨微信小程序中的可拖曳容器组件,详细介绍其基本概念、常用属性以及如何在实际项目中实现这个功能。我们将结合实例,展示如何通过可拖曳容器组件提升小程序的交互性和用户友好度。

无论你是刚刚踏入小程序开发领域的新手,还是希望丰富应用功能的经验开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索可拖曳容器组件的应用潜力,创造出更加生动和引人入胜的小程序吧!

🚀一、可拖曳容器组件

当页面内某些组件的位置支持用户拖曳设置时,就可以使用可拖曳的容器组件movable-area。movable-area组件可以理解为一块支持内部组件拖曳移动的区域。其内的子组件必须是movable-view才能支持拖曳操作。

🔎1.可拖曳容器组件示例

🦋1.1 步骤 1: 创建页面文件

首先,在示例项目的 pages 文件夹下新建一个名为 movableDemo 的页面。

🦋1.2 步骤 2: 编写 movableDemo.wxml 文件

movableDemo.wxml 文件中,编写如下代码:

<!-- pages/movableDemo/movableDemo.wxml -->
<movable-area class="movable">
  <movable-view class="block" direction="all">色块 1</movable-view>
  <movable-view y="60" class="block" direction="horizontal">色块 2</movable-view>
  <movable-view y="120" class="block" direction="vertical">色块 3</movable-view>
</movable-area>

在上述代码中,在页面中创建了 movable-area 容器,容器内放置了 3 个子组件,都是 movable-view 组件。对于这 3 个子组件,分别设置为可任意方向拖曳移动、可水平方向拖曳移动和可竖直方向拖曳移动。

🦋1.3 步骤 3: 编写 movableDemo.wxss 文件

movableDemo.wxss 文件中简单实现一下样式,代码如下:

/* pages/movableDemo/movableDemo.wxss */
.movable {
  width: 100%;
  height: 300px;
  background-color: gray;
}

.block {
  background-color: red;
  width: 50px;
  height: 50px;
  line-height: 50px;
  text-align: center;
  color: wheat;
}

在上述样式中,我们设置了 movable 容器的宽度和高度,并为 block 子组件设置了背景颜色、尺寸、文本居中等样式。

🦋1.4 编译代码

编译代码后,效果如图所示。我们可以尝试对页面中 3 个色块进行拖曳移动,移动后可发现:

  • 第一个色块可以任意方向拖曳移动。
  • 第二个色块只能在水平方向拖曳移动。
  • 第三个色块只能在竖直方向拖曳移动。

在这里插入图片描述

这样,我们就完成了一个简单的可拖曳色块的页面实现。

🔎2.movable-area组件与 movable-view 组件

🦋2.1 movable-area

属性名 类型 意义
scale-area 布尔值 设置 movable-area 区域是否支持缩放操作

movable-area 使用虽然非常简单,但是有一点需要注意,movable-area 必须设置 widthheight 属性,如果不设置,默认的宽高为 10px。当 movable-view 组件的尺寸小于 movable-area 时,movable-view 只能在 movable-area 区域内进行移动。当 movable-view 组件尺寸大于 movable-area 时,其宽高设为 scroll-view 非常类似了,可以进行移动和缩放并展示完整的视图。同时,它也必须放置在 movable-area 组件内部,否则不能支持拖拽与缩放。movable-view 是最复杂支持拖拽与滑动的视图组件,属性如表 3-7 所示。

🦋2.2 movable-view

属性名 类型 意义
direction 字符串 设置支持的移动方向,可设置为:
  • all:水平和垂直方向都支持
  • vertical:支持竖直方向移动
  • horizontal:支持水平方向移动
  • 空值:不支持移动
inertia 布尔值 设置移动是否有惯性,设置为 true 时,快速滑动组件可以使组件飘动一段距离
out-of-bounds 布尔值 设置移动过程中是否允许移动超出 movable-area 区域
x 数值或字符串 设置组件 x 轴的位置,代码改变此值会有移动动画产生
y 数值或字符串 设置组件 y 轴的位置,代码改变此值会有移动动画产生
damping 数值 设置阻尼系数,阻尼越大移动越快
friction 数值 设置摩擦系数,摩擦越小,值越大滚动越快
disabled 布尔值 此组件是否禁用
scale 布尔值 此组件是否支持双指缩放
scale-min 数值 设置缩放倍数的最小值,默认值为 0.5
scale-max 数值 设置缩放倍数的最大值,默认值为 10
scale-value 数值 设置当前组件的缩放倍数
animation 布尔值 设置是否使用动画
bindchange 函数 组件拖拽过程中的回调事件
bindscale 函数 组件缩放过程中的回调事件
htouchmove 函数 横向移动的触摸事件回调
vtouchmove 函数 纵向移动的触摸事件回调

🦋2.3 事件处理:bindchange

对于 bindchange 事件,有时需要知道触发它的来源。在其回调的参数中有 source 字段,这个字段表示了触发 bindchange 事件的原因。

source 字段的值与含义:

  • source 值为 touch 时,表示 bindchange 事件是由用户拖曳触发的。
  • source 值为 touch-out-of-bounds 时,表示 bindchange 事件是超出移动区域范围触发的。
  • source 值为 out-of-bounds 时,表示 bindchange 事件是由超出移动区域范围后回弹效果触发的。
  • source 值为 inertia 时,表示 bindchange 事件是由惯性效果触发的。
  • source 值为空字符串时,表示 bindchange 事件是代码设置组件 xy 属性移动触发的。

movable-view 组件布局与尺寸控制

  • movable-view 组件默认采用的是绝对定位的布局方式,通常我们不会通过样式表对其位置进行设置,而是通过组件的 xy 属性进行设置。
  • movable-view 组件必须设置样式表中的 widthheight 属性来控制组件的尺寸大小。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。