首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 初步介绍微信小程序
02 | 还有哪些其它公司的小程序产品
03 | 小程序的特点及开发能力
04 | 新的一年,微信小程序开放了哪些新功能?
05 | 小程序运行机制简介:从零构建一个Web App需要做哪些事情?
06 | 开发环境配置:创建你的第一个小程序项目
07 | icon组件:关于图标的4个实现方案
08 | progress组件:如何自定义实现一个环形进度条?
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
10 | view容器组件及Flex布局(一):学习容器组件view及其重要属性
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
12 | 可移动容器及可移动区域(一):学习使用movable-view与movable-area组件
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
14 | scroll-view介绍:在小程序中如何实现滚动锚定?
15 | scroll-view介绍:如果渲染一个滚动的长列表?
16 | 滚动选择器(一):学习使用选择器组件
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider?
19 | 页面链接组件:如何自定义一个导航栏?
20 | image媒体组件(上):如何实现图片的懒加载?
21 | image媒体组件(下):开发中经常遇到的问题?
22 | 如何实现直播间功能?(一):了解live-pusher、live-player组件的主要属性及使用限制
23 | 如何实现直播间功能?(二):如何开启、使用腾讯云的云直播功能
24 | 如何实现直播间功能?(三):安装与使用ffmepg,及使用ffmpeg进行推拉流验证
25 | 如何实现直播间功能?(四):使用live-pusher、live-player组件在小程序中实现直播功能
26 | 如何实现直播间功能?(五):同层渲染
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
28 | web-view(一):了解session、cookie等相关基本概念
29 | web-view(二):了解常见的四种鉴权方式
30 | web-view(三):如何使用koa框架,及如何进行热加载?
31 | web-view(四):如何在服务器端实现cookie与sesson的生成?
32 | web-view(五):如何将session存储到服务器端,及如何实现token验证?
33 | web-view(六):基于koa中间件,实现微信一键登录的后端接口
34 | web-view(七):实现微信用户一键登录
35 | web-view(八):了解正确的微信登录姿势
36 | web-view(九):web-view组件在开发的常见问题讲解
37 | WebGL介绍(一):了解WebGL相关的基础概念
38 | WebGL介绍(二):如何在小程序中取到WebGL上下文环境对象
39 | WebGL介绍(三):了解WebGL的世界坐标系
40 | WebGL介绍(四):重新认识右手坐标系及如何编写顶点着色器代码
41 | WebGL介绍(五):学习片断着色器编写,了解变量修饰变型uniform与attribute
42 | WebGL介绍(六):了解在WebGL中裁剪空间是如何裁剪出来的
43 | WebGL介绍(七):了解着色器变量值的绑定及三种三角形绘制模式之间的差异
44 | WebGL介绍(八):在着色器中使用共享变量,绘制一个颜色渐变的正方形
45 | WebGL介绍(九):完成动画
46 | WebGL介绍(十):绘制一个旋转的立方体
47 | WebGL介绍(十一):在3D绘制中使用纹理材质
48 | WebGL介绍(十二):如何创建相机、场景及光源
49 | WebGL介绍(十三):创建加载器、渲染器与控制器,完成3D模型文件的加载与展示
50 | 网络接口简介(一):如何使用wx.request接口
51 | 网络接口简介(二):将登录代码模块化封装
52 | 网络接口简介(三):Promise介绍及 6 个常用方法
53 | 网络接口简介(四):Promise三个方法any、all与race的使用介绍
54 | 网络接口简介(五):基于Promise+await、async关键字改写登录模块
55 | 网络接口简介(六):关于Page页面隐藏代码执行及Promise对象的catch处理的补充
56 | 网络接口简介(七):学习EventChannel对象
57 | 网络接口简介(八):观察者模式介绍及Event模块实现
58 | 网络接口简介(九):扩展wxp模块的request3方法,实现用户登录的自动融合
59 | tabBar组件(一):系统默认的tabBar组件如何开启及使用
60 | tabBar组件(二):基于系统提供的自定义方式,实现一个tabBar组件
61 | tabBar组件(三):通过自定义组件扩展的方式,给任意组件添加通用方法
62 | 开放接口(一):如何对Page进行全局扩展
63 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 章节 12 | 可移动容器及可移动区域(一):学习使用`movable-view`与`movable-area`组件 在微信小程序开发中,实现元素的拖动、滑动或拖拽功能往往能提升用户体验,尤其是在需要用户交互操作的场景中,如滑动查看图片、拖拽排序列表等。微信小程序提供了`movable-view`和`movable-area`这两个组件,允许开发者轻松实现可移动容器的功能。本章将深入介绍这两个组件的基本用法、属性、事件以及它们之间的配合方式,帮助读者掌握如何在微信小程序中实现复杂的拖拽效果。 #### 12.1 引言 在移动应用中,用户对于直接操作界面元素的需求日益增加。`movable-view`与`movable-area`的组合,正是为了满足这种需求而设计的。`movable-area`作为可移动区域,定义了`movable-view`(可移动视图)的移动范围;而`movable-view`则是实际进行移动的元素。通过这对组件,开发者可以构建出丰富多样的交互效果。 #### 12.2 `movable-area`组件基础 `movable-area`是一个容器组件,用于包裹`movable-view`,定义其移动的区域边界。它本身并不提供直接的视觉样式,其主要职责是确定`movable-view`的移动范围。 **属性**: - `scale-area`:布尔值,指定是否将移动区域的大小缩放到`movable-view`的初始尺寸。默认为`false`。 - `inertia`:布尔值,是否启用惯性滑动。默认为`false`。 - `damping`:数值,范围从0到1,表示滑动时的阻尼系数,值越大,滑动越慢。默认为0.2。 - `friction`:数值,范围从0到1,表示滑动时的摩擦系数,值越大,滑动停止越快。默认为0.3。 - `disabled`:布尔值,是否禁用`movable-area`内的所有`movable-view`的滑动。默认为`false`。 **注意**:`movable-area`的大小应明确设置,通常通过CSS样式来指定宽高,以确保`movable-view`能在预定的范围内移动。 #### 12.3 `movable-view`组件详解 `movable-view`是可移动视图组件,必须置于`movable-area`内部,才能正常工作。它允许用户通过拖动来移动视图内容。 **属性**: - `direction`:字符串,指定可移动的方向,可选值为`all`、`vertical`、`horizontal`、`none`。默认为`all`,表示可以沿任意方向移动。 - `inertia`:布尔值,是否启用惯性滑动,与`movable-area`的`inertia`属性类似,但可单独设置。默认为`false`。 - `out-of-bounds`:布尔值,是否允许移动出`movable-area`的边界。默认为`false`。 - `x`、`y`:数值,分别表示`movable-view`的初始位置(相对于`movable-area`的左上角)。 - `damping`、`friction`:与`movable-area`相同,但允许对单个`movable-view`进行定制。 - `disabled`:布尔值,是否禁用当前`movable-view`的滑动功能。默认为`false`。 **事件**: - `change`:当`movable-view`的位置发生变化时触发,返回当前的位置信息(x, y)。 - `touchend`:当触摸结束时触发,无论是否移动了`movable-view`。 **注意**:`movable-view`的样式(如宽高、背景等)需要通过CSS来设置,且其内部内容可以是任何有效的WXML结构。 #### 12.4 实践案例:图片滑动查看器 接下来,我们将通过一个图片滑动查看器的实例,展示如何使用`movable-view`和`movable-area`组件。 **WXML结构**: ```xml <view class="container"> <movable-area class="movable-area"> <movable-view class="movable-view" direction="horizontal" inertia="true" bindchange="handleChange"> <image src="{{imageSrc}}" mode="widthFix" /> </movable-view> </movable-area> </view> ``` **WXSS样式**: ```css .container { width: 100%; height: 300px; overflow: hidden; } .movable-area { width: 100%; height: 100%; } .movable-view { width: 100%; /* 根据实际情况调整 */ height: 100%; white-space: nowrap; /* 保证图片横向排列 */ } .movable-view image { display: inline-block; width: auto; /* 保持图片原始宽高比 */ height: 100%; vertical-align: top; } ``` **JS逻辑**: ```javascript Page({ data: { imageSrc: 'path/to/your/image.jpg', // 假设为长图 }, handleChange: function(e) { console.log('Current position:', e.detail); // 可以在这里处理位置的变更,比如更新数据等 } }); ``` #### 12.5 注意事项与优化 - **性能优化**:对于大型或复杂的`movable-view`内容,应考虑其渲染性能。避免在`movable-view`内部使用过多的DOM节点或复杂的CSS效果。 - **边界处理**:当`movable-view`移动至`movable-area`边界时,可通过监听`change`事件并调整`x`、`y`属性来限制其移动范围,或者使用`out-of-bounds`属性但自行处理边界回弹效果。 - **用户体验**:合理设置`damping`和`friction`值,以提供流畅的滑动体验。同时,考虑添加视觉反馈,如滑动指示器或阴影效果,提升用户感知。 #### 12.6 结论 通过本章的学习,我们深入了解了微信小程序中`movable-view`与`movable-area`组件的基本用法、属性、事件以及它们在实际应用中的配合方式。这两个组件为开发者提供了强大的拖拽功能支持,使得在小程序中实现复杂的交互效果变得简单可行。希望读者能够灵活运用这些知识,创造出更加丰富、有趣的用户体验。
上一篇:
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
下一篇:
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
该分类下的相关小册推荐:
微信小程序底层框架实现原理
微信小程序全栈开发实战(中)
微信小程序与云开发(上)
微信小程序与云开发(下)
微信小程序全栈开发实战(下)
微信小程序与云开发(中)