uni-app左滑删除

基于uni-app实现列表左滑出现删除按钮功能
效果图如下


jianshu.png

html部分如下:

<view class="member-list-li clearfix" v-for="(item,index) in result" v-else>
            <view class="touch-list list-touch clearfix" @touchstart="touchS" @touchmove="touchM" @touchend="touchE" :data-index="index" :style="item.txtStyle" @click="goDetail(item.user_id)">
                <view class="member-box clearfix">
                    <view class="member-title name">{{item.name}}</view>
                    <view class="member-title phone">{{item.mobile}}</view>
                </view>
                <view class="member-box"> 
                    <view class="member-cardno">{{item.member_cz_card_info.card_no}}</view>
                </view>
                <view class="member-box clearfix">
                    <!-- <button class="btn-unbind" @click="deleteMember(item.user_id)" @click.stop>删除</button> -->
                    <button class="btn-unbind" v-if="item.user_wechat!=null" @click="unBind(item.user_id)" @click.stop>解绑</button>
                    <button class="btn-unbind" @click="goUpdate(item.user_id)" @click.stop>更新</button>
                    <button class="btn-charge" v-if="item.member_cz_card_info" @click="goRecharge(item.user_id,item.name,item.mobile,item.member_cz_card_info.id,item.member_cz_card_info.name)" @click.stop>充值</button>
                </view>
            </view>
            <view class="touch-list list-delete" :data-userid="item.user_id" @click= "deleteMember(item.user_id)" >
                删除
            </view>
        </view>

return中定义变量

return {
                // 前台用户标志
                result:[],
                delBtnWidth: 60, //删除按钮宽度单位(rpx)
                startX:'',
            };

相关方法函数如下

           touchS: function (e) {
                // console.log('touchS')
                if (e.touches.length == 1) {
                    //设置触摸起始点水平方向位置
                    this.startX=e.touches[0].clientX
                    // console.log(this.startX)
                }
            },
            touchM: function (e) {
                 // console.log('touchM')
                if (e.touches.length == 1) {
                    //手指移动时水平方向位置
                    var moveX = e.touches[0].clientX;
                    //手指起始点位置与移动期间的差值
                    var disX = this.startX - moveX;
                    var delBtnWidth = this.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";
                        }
                    }
                    //获取手指触摸的是哪一项
                    var index = e.currentTarget.dataset.index;
                    var list = this.result;
                    list[index].txtStyle = txtStyle;
                    // console.log(list[index].txtStyle)
                    //更新列表的状态
                    this.result=list;
                }
            },
            touchE: function (e) {
                // console.log('touchE')
                if (e.changedTouches.length == 1) {
                    //手指移动结束后水平位置
                    var endX = e.changedTouches[0].clientX;
                    //触摸开始与结束,手指移动的距离
                    var disX = this.startX - endX;
                    var delBtnWidth = this.delBtnWidth;
                    //如果距离小于删除按钮的1/2,不显示删除按钮
                    var txtStyle = disX > delBtnWidth / 2 ? "left:-" + delBtnWidth + "px" : "left:0px";
                    //获取手指触摸的是哪一项
                    var index = e.currentTarget.dataset.index;
                    var list = this.result;
                    list[index].txtStyle = txtStyle;
                    // console.log(list[index].txtStyle)
                    //更新列表的状态{
                    this.result=list
                }
            },
            //点击删除按钮事件
            delItem: function (e) {
                //获取列表中要删除项的下标
                var userid = e.currentTarget.dataset.userid;
                this.deleteMember(userid);
            },

css相关样式如下,图片中按钮样式这里就不放啦,自定义就好

.member-list-li{
    position: relative; 
    overflow: hidden;
    margin: 15px 0;
    border: 1px solid #EEEEEE;
    border-radius: 10px;
    color: #fff;
}
.touch-list{
    position: absolute; 
    top:0; 
    padding: 10px 10px 10px;
    background-color: #697082;
    border-radius: 10px;
    overflow: hidden;
}
.list-touch{
    position: relative;
    width: 100%;   
    z-index: 5;    
    transition: left 0.2s ease-in-out;   
    white-space:nowrap;   
    overflow:hidden;   
    text-overflow:ellipsis; 
}
.list-delete{
    right: 0; 
    float: left;
    width: 70px;
    height: 121px;
    line-height: 101px;
    background-color: #EA5863;
    border-radius: 0 10px 10px 0;
    color: #fff;
    font-size: 18px;
    font-weight: lighter;
    text-align: center;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,968评论 1 45
  • uni-app跨平台框架官方教程 链接:https://ke.qq.com/course/343370 一、框架简...
    Neyo_凉阅读 36,435评论 0 43
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,680评论 1 92
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 9,590评论 0 0