微信小程序如何实现单个卡片左滑显示按钮并防止上下滑动干扰功能

  介绍

小编给大家分享一下微信小程序如何实现单个卡片左滑显示按钮并防止上下滑动干扰功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

实现类似ios端微信的左滑显示置顶,删除按钮的功能,首先需将按钮部分设为绝对定位,并且对设为负值溢出屏幕。利用小程序事件处理的api,分别读取触摸开始,触摸移动时,触摸结束的X/Y坐标,根据差值来改变整个卡片的位置。

这里有一个细节,为了防止按钮的点击干扰到卡片主部分的滑动,需要将整个卡片分为两部分。

& lt; View 风格={" $ {positionStyle(指数)}'}祝辞   & lt;才能View    ,,,onTouchStart={this.moveTaskStart}   ,,,onTouchMove={this.moveTask}   ,,,onTouchEnd={this.moveTaskEnd}   祝辞才能;   ,,,这是主要的卡片部分   & lt;才能/View>      & lt;才能View 在这是滑动后出现的按钮部分& lt;/View>   & lt;/View>

这里使用的是芋头框架,方法与原生事件api一样,在开始滑动时分别存入X, Y坐标,在手指移动过程中计算移动的距离,当X的移动距离大于整个按钮部分的一班,展开按钮。

核心功能的实现,只需要分析X坐标即可,但因为用户可能在上下滑动过程中X坐标也会偏移造成按钮的展开,所以需要在移动与结束两部分都计算垂直坐标的改变与水平坐标改变形成的角度,当角度过大,视为上下滑动,按钮不展开。
完整代码如下:

moveTaskStart (e), {   if 才能;(e.touches.length ==, 1), {   ,,,//触摸屏上只有一个触摸点   ,,,this.setState ({   ,,,,,//,开始触摸屏幕的X坐标   ,,,,,startX:, e.touches [0] .clientX,   ,,,,,startY:, e.touches [0] .clientY   ,,,});   ,,}   }      moveTask (e), {   if 才能;(e.touches.length ==, 1), {   ,,,let  moveX =, e.touches [0] .clientX;   ,,,let  moveY =, e.touches [0] .clientY;   ,,,//,移动距离   ,,,let  disX =, this.state.startX 作用;moveX;   ,,,let  disY =, this.state.startY 作用;moveY;   ,,,let  angle =, disY 祝辞,0,?,disY /, disX :, -disY /, disX;   ,,,let  btnWidth =, this.state.btnWidth;   ,,,let  txtStyle =,““   ,,,if  (disX ==, 0, | |, disX  & lt;, 30), {   ,,,,,//右滑动   ,,,,,txtStyle =,“左:0 px";   ,,,},else 如果(angle 比,0.5),{   ,,,,,返回;   ,,,},else  if  (30, disX 的在,,,,,angle  & lt;, 0.5), {   ,,,,,txtStyle =,左:- $ {disX} px ';   ,,,,,if  (disX 祝辞=,btnWidth), {   ,,,,,,,//距离最大值   ,,,,,,,txtStyle =,左:- $ {btnWidth} px ';   ,,,,,}   ,,,}   ,,,let  index =, e.currentTarget.dataset.index;   ,,,let  list =, this.state.positionStyle;   ,,,this.setState ({   ,,,,,positionStyle:列表   ,,,});   ,,}   }      moveTaskEnd (e), {   let 才能;txtStyle;   if 才能;(e.changedTouches.length ==, 1), {   ,,,let  endX =, e.changedTouches [0] .clientX;   ,,,let  moveY =, e.changedTouches [0] .clientY;   ,,,//移动距离   ,,,let  disX =, this.state.startX 作用;endX;   ,,,let  disY =, this.state.startY 作用;moveY;   ,,,//移动角度   ,,,let  angle =, disY 祝辞,0,?,disY /, disX :, -disY /, disX;   ,,,let  btnWidth =, this.state.btnWidth;   ,,,//如果距离大于按钮宽度的一半,并且移动角度较小,显示按钮   ,,,如果(disX 祝辞,(时间/btnWidth  2),,,, angle  & lt;, 0.5), {   ,,,,,txtStyle =,“左:- $ {btnWidth} px”   ,,,}else  {   ,,,,,txtStyle =,“左:0 px"   ,,,}   ,,,let  index =, e.currentTarget.dataset.index;   ,,,let  list =, this.state.positionStyle;   ,,,(指数)列表,=,txtStyle;   ,,,this.setState ({   ,,,,,positionStyle:列表   ,,,});   ,,}   }

以上是“微信小程序如何实现单个卡片左滑显示按钮并防止上下滑动干扰功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

微信小程序如何实现单个卡片左滑显示按钮并防止上下滑动干扰功能