首页
技术小册
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 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider? 在微信小程序的开发过程中,表单组件是与用户交互的重要组成部分,而滑动选择器(Slider)作为一种直观易用的输入方式,常用于需要用户选择一定范围内的数值或比例的场景。然而,微信小程序官方提供的Slider组件默认是横向的,对于需要竖向滑动选择的应用场景,如音量调节、进度条展示等,就需要我们自定义实现。本章节将详细介绍如何基于微信小程序脚本语言(WXS)来创建一个自定义的竖向slider组件,以满足特定需求。 #### 一、需求分析 在构建竖向slider之前,我们需要明确几个关键点: 1. **滑动方向**:实现从上到下的滑动效果。 2. **值域范围**:确定slider的最小值、最大值以及当前值。 3. **步长控制**:根据需要设置每次滑动的最小单位。 4. **外观定制**:包括滑块、滑道、指示器等元素的样式设计。 5. **事件响应**:处理滑动开始、进行中、结束等事件,更新当前值并触发相应逻辑。 #### 二、技术选型与准备 **WXS(WeiXin Script)** 是微信小程序推出的一套脚本语言,运行在JavaScriptCore中,但比JavaScript在性能上有所优化,特别适合于执行小程序的渲染逻辑。在本案例中,我们将利用WXS来处理slider的滑动逻辑,以保持界面的流畅性。 此外,我们还需要准备基础的WXML、WXSS和JavaScript文件来构建组件的结构、样式和行为。 #### 三、实现步骤 ##### 3.1 定义组件结构(WXML) 首先,我们需要在WXML中定义slider的基本结构,包括滑道(track)和滑块(thumb)。 ```xml <!-- components/vertical-slider/vertical-slider.wxml --> <view class="slider-container"> <view class="slider-track" style="height: {{height}}px;"> <view class="slider-bar" style="height: {{barHeight}}px;"></view> <view class="slider-thumb" style="transform: translateY({{thumbTop}}px);"></view> </view> </view> ``` 这里,`slider-track`是滑道的容器,`slider-bar`用于表示已选择的部分(可选),`slider-thumb`是滑块本身。通过动态绑定样式,我们可以控制它们的大小和位置。 ##### 3.2 编写样式(WXSS) 接下来,在WXSS中设置组件的样式,确保滑道和滑块能够正确显示,并支持竖向滑动。 ```css /* components/vertical-slider/vertical-slider.wxss */ .slider-container { width: 30px; /* 滑道宽度 */ position: relative; } .slider-track { width: 100%; background-color: #e0e0e0; border-radius: 5px; } .slider-bar { width: 100%; background-color: #409EFF; border-radius: 5px; position: absolute; bottom: 0; } .slider-thumb { width: 20px; height: 20px; background-color: #fff; border-radius: 50%; position: absolute; left: 50%; transform: translateX(-50%); cursor: pointer; user-select: none; } ``` ##### 3.3 编写逻辑处理(JS & WXS) **JS部分**:主要用于处理组件的初始化、属性传递以及事件监听。 ```javascript // components/vertical-slider/vertical-slider.js Component({ properties: { value: { type: Number, value: 0, observer: 'updateValue' }, min: { type: Number, value: 0 }, max: { type: Number, value: 100 }, step: { type: Number, value: 1 }, height: { type: Number, value: 200 } }, methods: { // 更新滑块位置 updateValue(newVal) { // 计算滑块顶部位置 const thumbTop = (newVal - this.properties.min) / (this.properties.max - this.properties.min) * this.properties.height; this.setData({ thumbTop: thumbTop - 10, // 假设滑块高度为20px,居中显示 barHeight: newVal === this.properties.max ? this.properties.height : thumbTop // 可选:显示已选择区域 }); }, // 滑动逻辑应由WXS处理,这里只展示JS部分如何初始化 onReady() { // 初始化时调用WXS函数设置初始状态 } } }); ``` **WXS部分**:由于微信小程序的触摸事件处理较为复杂,且为保持性能,我们通常在JS中监听触摸事件,但可以使用WXS来辅助计算滑块位置。不过,为简化示例,这里假设我们直接在JS中处理滑动逻辑,而WXS可能用于其他复杂计算或渲染优化。 **注意**:实际上,由于WXS主要用于数据渲染,并不直接处理用户交互事件,因此滑动逻辑(如计算滑动距离、更新值等)通常需要在JS中处理。不过,你可以利用WXS进行高效的数据处理和格式化,减少JS与视图层之间的通信成本。 ##### 3.4 滑动事件处理 在微信小程序中,滑动事件通常通过监听`touchstart`、`touchmove`、`touchend`事件来实现。你可以在JS中设置这些事件的监听器,并在事件处理函数中计算滑块的移动距离,进而更新其位置和当前值。 由于篇幅限制,这里不展开具体的事件处理代码,但基本思路是: - 在`touchstart`中记录起始触摸点的Y坐标。 - 在`touchmove`中计算当前触摸点与起始点的Y坐标差,据此更新滑块位置。 - 在`touchend`中确认最终位置,并触发相应的值更新逻辑。 #### 四、总结 通过上述步骤,我们成功构建了一个基于微信小程序自定义的竖向slider组件。该组件通过WXML定义结构,WXSS定义样式,JS和(潜在的)WXS处理逻辑,实现了从上到下的滑动选择功能。在实际开发中,你可能需要根据具体需求调整样式、增加动画效果或优化性能,但基本思路和方法是相通的。希望本章节的内容能为你的微信小程序开发之路提供有力支持。
上一篇:
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
下一篇:
19 | 页面链接组件:如何自定义一个导航栏?
该分类下的相关小册推荐:
微信小程序全栈开发实战(下)
微信小程序与云开发(上)
微信小程序全栈开发实战(中)
微信小程序与云开发(下)
微信小程序底层框架实现原理
微信小程序与云开发(中)