实现类似ios端微信的左滑显示置顶、删除按钮的功能,首先需将按钮部分设为绝对定位,并且right设为负值溢出屏幕。利用小程序事件处理的api,分别读取触摸开始,触摸移动时,触摸结束的X/Y坐标,根据差值来改变整个卡片的位置。
这里有一个细节,为了防止按钮的点击干扰到卡片主部分的滑动,需要将整个卡片分为两部分。
<View style={
`${
positionStyle[index]}`}>
<View
onTouchStart={
this.moveTaskStart}
onTouchMove={
this.moveTask}
onTouchEnd={
this.moveTaskEnd}
>
这是主要的卡片部分
</View>
<View style="right: -260px;">这是滑动后出现的按钮部分</View>
</View>
这里使用的是Taro框架,方法与原生事件api一样,在开始滑动时分别存入X,Y坐标,在手指移动过程中计算移动的距离,当X的移动距离大于整个按钮部分的一班,展开按钮。
核心功能的实现,只需要分析X坐标即可,但因为用户可能在上下滑动过程中x坐标也会偏移造成按钮的展开,所以需要在move与end两部分都计算垂直坐标的改变与水平坐标改变形成的角度,当角度过大,视为上下滑动,按钮不展开。
完整代码如下:
moveTaskStart(e) {
if (e.touches.length == 1) {