美文网首页前端共享小程序iOS日常知识储备
微信小程序左滑删除效果的实现

微信小程序左滑删除效果的实现

作者: 我叫了了 | 来源:发表于2017-02-19 19:47 被阅读27745次

    今天我们说下微信小程序左滑删除效果的实现,现在市场上很多APP都在使用这个效果,一个listView页面,向左滑动一条item时,右侧会出现一个删除或者其他的选项,用户体验非常好,操作起来十分方便,今天我们使用微信小程序来实现这个效果.......

    先看效果
    要实现的效果

    要实现的效果:
    1,当向左滑动时,item跟随手指像左移动,同时右侧出现两个可点击的按钮
    2,当滑动距离大于按钮宽度一半松开手指时,item自动滑动到左侧显示出按钮,小于一半时item自动回到原来的位置,隐藏按钮。

    思路:

    1,首先页面每个item分为上下两层,上面一层放置正常内容,下面一层放置左滑显示出的按钮,这个可以使用z-index来实现分层。
    2,item上层使用绝对定位,我们操纵 left 属性的值来实现像左移动。
    3,我们通过微信小程序api提供的touch对象和3个有关手指触摸的函数(touchstart,touchmove,touchend)来实现item随手指移动。

    小程序api-touch对象 Paste_Image.png

    由于比较简单,所以直接上代码了,详细的讲解都在代码的注释中,首先看下页面的布局

    <!--这是一个item的代码>
        <view class="address-item" wx:for="{{addressList}}" >
       <!--这里绑定了刚才说的3个函数分别为 touchS,touchM touchE-->
        <!--这里注意这个  style="{{item.txtStyle}}" ,这是我们一会再js中 将要设置的样式 -->
            <view style="{{item.txtStyle}}"  bindtouchstart="touchS" bindtouchmove="touchM" bindtouchend="touchE"  data-index="{{index}}"  class="address-item-top" >
             <!--中间无关的代码已被我删除-->
            </view>
    
             <!--这里是左滑按钮部分----start-->
            <view bindtap="delItem" class="posit">
                <view class="editor" data-addressid="{{item.address.ID}}" catchtap="setDefaultAddress">设为默认地址</view>
                <view class="del" data-addressid="{{item.address.ID}}" data-index="{{index}}" catchtap="delAddress">删除</view>
            </view>
             <!--这里是左滑按钮部分----end-->
        </view>
    

    再看js代码

    Page({
      data:{
        addressList:[{"Contact":"钟诚","Mobile":13888888888,"Address":"江苏省苏州市工业园区创意产业园"},
    {"Contact":"凹凸曼","Mobile":13666666666,"Address":"江苏省苏州市工业园区独墅湖体育馆"},
    {"Contact":"图傲曼","Mobile":13666666666,"Address":"江苏省苏州市工业园区独墅湖体育馆"}],
        editIndex:0,
        delBtnWidth:150//删除按钮宽度单位(rpx)
      },
      onLoad:function(options){},
     //手指刚放到屏幕触发
      touchS:function(e){
        console.log("touchS"+e);
       //判断是否只有一个触摸点
        if(e.touches.length==1){
          this.setData({
            //记录触摸起始位置的X坐标
            startX:e.touches[0].clientX
          });
        }
      },
     //触摸时触发,手指在屏幕上每移动一次,触发一次
      touchM:function(e){
          console.log("touchM:"+e);
        var that = this
        if(e.touches.length==1){
         //记录触摸点位置的X坐标
          var moveX = e.touches[0].clientX;
          //计算手指起始点的X坐标与当前触摸点的X坐标的差值
          var disX = that.data.startX - moveX;
         //delBtnWidth 为右侧按钮区域的宽度
          var delBtnWidth = that.data.delBtnWidth;
          var txtStyle = "";
          if(disX == 0 || disX < 0){//如果移动距离小于等于0,文本层位置不变
            txtStyle = "left:0px";
          }else if(disX > 0 ){//移动距离大于0,文本层left值等于手指移动距离
            txtStyle = "left:-"+disX+"px";
            if(disX>=delBtnWidth){
              //控制手指移动距离最大值为删除按钮的宽度
              txtStyle = "left:-"+delBtnWidth+"px";
            }
          }
          //获取手指触摸的是哪一个item
          var index = e.currentTarget.dataset.index;
          var list = that.data.addressList;
          //将拼接好的样式设置到当前item中
          list[index].txtStyle = txtStyle; 
          //更新列表的状态
          this.setData({
           addressList:list
          });
        }
      },
      touchE:function(e){
          console.log("touchE"+e);
        var that = this
        if(e.changedTouches.length==1){
          //手指移动结束后触摸点位置的X坐标
          var endX = e.changedTouches[0].clientX;
          //触摸开始与结束,手指移动的距离
          var disX = that.data.startX - endX;
          var delBtnWidth = that.data.delBtnWidth;
          //如果距离小于删除按钮的1/2,不显示删除按钮
          var txtStyle = disX > delBtnWidth/2 ? "left:-"+delBtnWidth+"px":"left:0px";
          //获取手指触摸的是哪一项
          var index = e.currentTarget.dataset.index;
          var list = that.data.addressList;
          list[index].txtStyle = txtStyle; 
          //更新列表的状态
          that.setData({
           addressList:list
          });
        }
      }
    

    结束!不足请指教

    相关文章

      网友评论

      • d59aee24aa8c:1694128998@qq.com 谢谢楼主,
      • 绿豆粥与茶叶蛋:求源码,我的邮箱是1113120663@qq.com,多谢
      • 48884a15af55:这么多人要源码是想累死楼主吗
      • _无我_:求源码,我的邮箱是1175720614@qq.com,多谢
      • 拾取灬回忆:虽然我也是伸手党,但是我先点个喜欢加收藏
      • 86c26e5b5a07:可以发一下源码吗,我的邮箱是1323664952@qq.com, 谢谢!!
      • 程序员卡诺:同情作者,楼下这一群群让人无语的伸手党
      • IWTF:求源码,2872503148@qq.com
      • 从入门到放弃治疗:楼主源码发一下可以吗?
      • 5ddee4c0dcb5:求源码,346738817@qq.com 谢谢大神
      • 星闪闪:求源码,1677516357@qq.com
      • 3c372d54ad60:求源码,大神,邮箱243944548@qq.com
        77bff310ac9a:收到源码了吗?
      • b92f05778616:可以发一份源码吗?可以的话发到这里2576357103@qq.com
        万分感谢!
      • bd26ac24eb8f:求大神分享源码 1275452509@qq.com
      • 5b059dbf4bea:求大神来份源码。。。。916971804@qq.com
      • Kings_fa66:963987632@qq.com大神求源码
      • 6bfe1a0ee742:你好,源码分享一份 谢谢啦 328635050@qq.com
      • 李大鱼_:你好 源码分享一份呗~谢谢 1767899282@qq.com
      • 04db9925a498:你好 源码分享一份呗~谢谢 1032201492@qq.com
      • 190857a394ed:你好 源码分享一份呗~谢谢 2397522920@qq.com
      • 8c7e4fa171e5:你好 源码分享一份呗~谢谢 1209305400@qq.com
      • 鸡腿的pp:你好 源码分享一份呗~谢谢 1058950445@qq.com
      • 0e931303cc10:你好 源码分享一份呗~谢谢 1605295134@qq.com
      • dd052c835748:你好 源码分享一份呗~谢谢 358102579@qq.com
      • acf645137c75:2549243835@qq.com 源码发一份, 谢谢
      • 0966fe7c5746:2399354859@qq.com 亲,源码发一份给我呗,谢谢
        77bff310ac9a:你好。收到源码没
      • JingYunJie:18335966283@163.com ,麻烦发一份给我学习下谢谢
      • c89d501d7506:553502180@qq.com 已关注,来份源码学习学习呗。谢谢
      • c591bab73880:想看下源码,15951994085@163.com,谢谢谢谢谢!!!
      • 03e4f5f911d1:1216201641@qq.com demo发一份吧?不胜感激
      • it小菜:大神发个地址吧865691337@qq.com
      • 44c4cbf6c58f:122045918@qq.com关注了 发个源码呗 谢谢啦
      • 2c4325a74894:可以发下源码吗 2424733678@qq.com
      • cacb81eb17b6:923994671@qq.com 关注了 发个源码呗 谢谢啦
      • ca4da13104cc:1779682373@qq.com 求发一份
      • 中鼎:能发个源码1120099539@qq.com
      • 187becac7c42:757940497@qq.com 谢谢作者 发一份源代码
      • 2_snoopy:904291035@qq.com 谢谢作者
      • ccd93eea92c3:可以发我一份吗?谢谢 445827735@qq.com
      • 2_snoopy:904291035@qq.com 求一份,谢谢啦
      • 0d5712bad4c4:ctl215@163.com关注了,麻烦发个源码
      • 2c4419e9dafa:感谢作者,但是试过之后,在上下滑动的时候,有时也会出现删除按钮。肿么破。
      • 28168db347d3:wulileaf@aliyun.com发个源码呗,学习下!!~~~
      • 46ac6ee0fb42:501399379@qq.com关注了 发个源码呗 谢谢,贴出来的代码不全
      • 29b8bbcc5757:794516020@qq.com 作者发个代码 读者研习一番
      • 小丑_3bd1:1109056621@qq.com 谢谢楼主大大呀!:heart_eyes:
      • robotlee8:为啥没有wxss?
      • _____c32a:老哥 可以发我个完整的源码么 623875828@qq.com
      • atomy:412757277@qq.com 谢谢了
      • e793774177bd:你好,是否可以提供一下全部代码?非常感谢!邮箱是2388734960@qq.com
      • 慕容小伟:真是个人才,不放css,我就是来看css的,哈哈
      • 1172c8d5e1d9:1340759849@qq.com 感谢作者
      • Samuel_Tom:感谢楼主!!邮箱:1053157543@qq.com
      • AddisonLi:css没发出来啊
      • 李乾坤David:请问楼主没有github地址吗?
      • 60baed77ce32:407321708@qq.com,球个源码,谢谢了
      • 0ddb14fd1253:438851397@qq.com,可以提供下代码么
      • ee81339327a3:您好,可以发一份源码给我学习一下吗?谢谢你。1614079243@qq.com
      • 小马哒哒哒哒哒哒:724503670@qq.com 关注了 发个源码呗 谢谢啦
      • 1530ad286d3f:15394407439@163.com 我也需要一份源码,谢谢:blush:
      • 1172c8d5e1d9:可以分享一下代码吗 谢谢 1340759849@qq.com
      • d8c43d236976:麻烦给发一下博主,1669056669@qq.com谢谢
      • 7be18373dcfa:如果可以的话求一份源码 学习 万分感谢! 823304461@qq.com
      • ruiaylin:作者好, 能否发一份源码, 我的邮箱 782082893@qq.com
      • Claudlit:lz,为什么我的删除事件 没有响应
      • e9a2683d82ce:429161414@qq.com
      • 4e70a6e1af52:祝楼主新年进步,请问能不能发一份这个的源码给我,学习学习,谢谢!88196718@qq.com
      • 687efbd0b3f7:你好能发个源码给我学习一下吗,谢谢 540230904@qq.com
      • dd178a6326ce:大神,发下源码嘛,2439172011@qq.com
      • 2a6d43999a4f:楼主:653411722@qq.com 多谢
      • a72f56572a03:1780086485@qq.com 麻烦发下哦 谢谢大佬~~~
      • Tintin做事叮叮噹:CSS布局如何呢,楼主方便分享一下吗,感谢!heroimail@163.com
      • b79219bdf250:vicwang96@163.com 关注了 发个源码呗 谢谢啦
      • f6d22739b864:大神,能帮忙也所有的源代码吗?
        f6d22739b864:@我叫了了 421256510@qq.com
      • 8a8a1f6e4950:1113944007@qq.com 可以给发一下全部代码吗,非常感谢
        8a8a1f6e4950:@FutureBeing 没收到
        f6d22739b864:@安安anni 亲,给您发了吗?方便给我发一份吗?😀😀😀
      • 71b6f3f7bd0f:xuminlei_xml@163.com ,谢谢!:yum:
      • 159e5601e0f2:楼主源码能发我一份吗? 13712124581@163.com
      • 不爱去冒险的少年y:楼主大大 能发一份源码给我吗:heart_eyes: 1126509225@qq.com
      • 尤文没有吐司:417699574@qq.com 作者好人
      • 123674585508575:您好,给我发一份源码好吗
        2372454518@qq.com
      • 21d798b93e96:您好,代码可以发份给我吗?1845031670@qq.com 谢谢
      • 1e2bc1362eb2:1500447979@qq.com,发我一份,谢谢作者
      • b70e7fbe6b48:兄弟这么多人求源码。你一个一个发不累么。真的直接给个下载链接就好了。哪怕是云盘分享。。。
      • 9babb5bd82f7:2232924798@qq.com 麻烦楼主发下代码,万分感谢。。
      • 5041fd3b847e:你好 610488620@qq.com 可以发一下代码么 谢谢
      • 08e9f89ff567:492525217@qq.com谢谢作者
      • 737157673f01:您好,麻烦您发我一份吧,感谢。zxm11043@163.com:pray:
      • a5f1742d4a0d:能发一份给我吗949116674@qq.com
      • 陈大任性:865425817@qq.com,感谢作者
      • 5db91696bec3:老哥,麻烦给我发一份,谢谢了 2395125714@qq.com
      • a7a2ae5dd685:哇,厉害了,膜拜ing,可以发下源码嘛?谢谢
        1398546280@qq.com
      • Tequiero_0e09:源码 能不能发我一份,谢谢
        Tequiero_0e09:379896771@qq.com
      • 08aba0b641c7:粘贴上去出错了,改了下还是没有出现你那个效果,可以给我一份吗412617860@qq.com
      • 5b78f31ae837:838647225@qq.com求源码
      • 39f9d0260c96:能给我发一份学习下吗?邮箱314062990@qq.com 。感谢!
      • next_discover:学习一下,769170220@qq.com
      • 不了LZ:867825131@qq.com 感谢作者
      • 29cbaf73ea98:772452376@qq.com作者可以给我发一份么?谢谢
      • 6811e0acb2fd:2568566249@qq.com,发一份吧,学习学习,谢谢
      • c1f7182ced2e:1542437921@qq.com 谢谢楼主 新手学习学习

      本文标题:微信小程序左滑删除效果的实现

      本文链接:https://www.haomeiwen.com/subject/uxvjwttx.html