生命的意义在于折腾

微信小程序侧滑删除组件

wxml

html

1<view class="container" >
2  <view class="slide-box"
3        style="transform: translateX(-{{translateX}}rpx);transition: transform .8s "
4        bindtouchstart="handleTouchStart"
5        bindtouchmove="handleTouchMove"
6        bindtouchend="handleTouchEnd"
7  >
8    <view class="slide-left" >
9      <slot name="slideLeft"></slot>
10    </view>
11    <view class="slide-right" style="width:{{slideWidth}}rpx">
12      <slot name="slideRight"></slot>
13    </view>
14  </view>
15</view>
16

js

javascript

1Component({
2	options: {
3		multipleSlots: true,
4	},
5	properties: {
6		slideWidth: { // 右侧滑块的width
7			type: Number,
8			value: 0,
9		},
10	},
11	data: {scroll: true, touches: [], translateX: 0},
12	methods: {
13		/* 计算滑动角度
14		* @param {Object} start 起点坐标
15		* @param {Object} end 终点坐标
16		*/
17		handleAngle(start, end) {
18			var _X = end.clientX - start.clientX;
19			var _Y = end.clientY - start.clientY;
20			// 返回角度 /Math.atan()返回数字的反正切值
21			return 360 * Math.atan(_Y / _X) / (2 * Math.PI);
22		},
23		// 触摸开始
24		handleTouchStart(e) {
25			const {touches} = e;
26			// @touches typeof  Array
27			// touches.length  手指触摸屏幕的个数
28			this.data.scroll = touches.length === 1;
29			this.data.touches = e.touches;
30		},
31		handleTouchMove(e) {
32			if (this.data.scroll) {
33				// 滑滑动的角度
34				let angle = this.handleAngle(this.data.touches[0], e.touches[0]);
35				// 滑滑动的角度 如果 > 30 不做操作
36				if (Math.abs(angle) > 40) return;
37				// PosX 手指在X轴的坐标差   判断滑动方向
38				let PosX = e.touches[0].pageX - this.data.touches[0].pageX;
39				// PosX < -50  => Left  左滑
40				// PosX > 50  => Right 右滑
41				if (PosX < -50) {
42					this.setData({
43						translateX: this.properties.slideWidth,
44					});
45				}
46				else if (PosX > 50) {
47					this.setData({
48						translateX: 0,
49					});
50				}
51			}
52		},
53
54		// 触摸结束
55		handleTouchEnd(e) {
56			this.data.scroll = false;
57		},
58	},
59	pageLifetimes: {
60		// 组件所在页面的生命周期函数
61		hide: function () {
62			this.setData({
63				translateX: 0,
64			});
65		},
66	},
67});
68

wxs

css

1.container{
2  position: relative;
3  padding: 0;
4  overflow: hidden;
5}
6  
7
8.container  .slide-box{
9	 position: relative;
10    min-height: 40rpx;
11}
12   
13
14.slide-right{
15	 position: absolute;
16	 top: 0;
17     bottom: 0;
18     left: 100%;
19
20}
21     

json

json

1{
2	"component": true
3}
阅读量:3688发布日期:2021-06-11 16:54:29

博客描述

模拟微信好友列表,左滑删除,置顶的功能

留言板