uniapp 简单实现列表左滑操作

先看效果,还挺丝滑

一、页面代码,东西不多,主要注意

开始触发 @touchstart="drawStart"

滑动 @touchmove="drawMove"

触摸滑动结束@touchend="drawEnd"

html 复制代码
<template>
    <view class="container">
       <view class="main">
       	<view v-for="(item, index) in shareList" :key="index" :data-index="index" class="order-item"
       	    @touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+item.right+'px'">
       	    <view class="content">
       			<view class="active" ></view>
       	       <image class="userlogo" :src="item.logo"></image>
       	       <view class="zbname">
       	       	{{item.title}}
       	       </view>
       	       <view class="zbcount">
       	       	&nbsp;&nbsp;[共享]
       	       </view>
       	       <button class="yqclass" open-type="share">邀请成员</button>
       	    </view>
       		<view class="zhiding" @click="zdData(item)">置顶</view>
       	    <view class="remove" @click="delData(item)">删除</view>
       	    <view class="edit" @click="editData(item)">编辑</view>
       	</view>
       </view>

    </view>
</template>

二、js 代码

javascript 复制代码
 export default {
        data() {
            return { //列表数据,可根据自己的业务获取
                //列表数据,可根据自己的业务获取
                shareList: [{
					id:0,
					logo:'/static/logo.png',
                    title: '测试1',
                    right: 0
                },
				{
					id:1,
					logo:'/static/logo.png',
				    title: '测试2',
				    right: 0
				},
				{
					id:2,
					logo:'/static/logo.png',
				    title: '测试3',
				    right: 0
				}
				],
                //左滑默认宽度
                delBtnWidth: 90,
            }
        },
        methods: {
            //开始触摸滑动
            drawStart(e) {
                console.log("开始触发");
                var touch = e.touches[0];
                this.startX = touch.clientX;
            },
            //触摸滑动
            drawMove(e) {
                console.log("滑动");
                for (var index in this.shareList) {
                    this.$set(this.shareList[index], 'right', 0);
                }
                var touch = e.touches[0];
                var item = this.shareList[e.currentTarget.dataset.index];
                var disX = this.startX - touch.clientX;
                if (disX >= 20) {
                    if (disX > this.delBtnWidth) {
                        disX = this.delBtnWidth;
                    }
                    this.$set(this.shareList[e.currentTarget.dataset.index], 'right', disX);
                } else {
                    this.$set(this.shareList[e.currentTarget.dataset.index], 'right', 0);
                }
            },
            //触摸滑动结束
            drawEnd(e) {
                console.log("滑动结束");
                var item = this.shareList[e.currentTarget.dataset.index];
                if (item.right >= this.delBtnWidth / 2) {
                    this.$set(this.shareList[e.currentTarget.dataset.index], 'right', this.delBtnWidth*2);
                } else {
                    this.$set(this.shareList[e.currentTarget.dataset.index], 'right', 0);
                }
            }

        }
    }

三、css 也是很简单

javascript 复制代码
<style lang="scss" scoped>
 
    .main {
        width: 100%;
        height: auto;
        margin: 10px auto;
        overflow: hidden
    }

    .order-item {
            width: 96%;
            display: flex;
            position: relative;
            margin: 10px auto;
            align-items: right;
            flex-direction: row;
    		border-radius: 5px;
    		background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
    
        .content {
            width: 100%;
            margin: 0 auto;
        }
    	 .remove, .edit,.zhiding{
    		 width: 50px;
    		 height: 100%;
    		 color: #fff;
    		 position: absolute;
    		 top: 0;
    		 display: flex;
    		 justify-content: center;
    		 align-items: center;
    		 font-size: 14px;
    		 border-radius: 12rpx;
    	 }
        .remove {
            right: -180px;
            margin-left: -5%;    
            background-color: #fa4659;
        }
    	.zhiding {
            right: -60px;
            background-color: #08d9d6;
        }
        .edit {
    		right: -120px;
            background-color: #17b978;
        }
	.yqclass{
	    float: right;
	    font-weight: 600;
	    margin: 20px;
	    line-height: 16px;
	    border-radius: 5px;
		color: #fff;
		color: #fff;
		background-color: rgba(128, 128, 128, 0.1);
	}
	.yqclass::after {
		 border: none;
		}
	 
	.yqclass{
		font-size: 14px;
		padding: 10px 15px;
		 box-shadow: 0 4px 20px rgba(0, 0, 0, 1);
	}
	.zbname,.zbcount{
	    float: left;
	    font-weight: 600;
	    padding: 30px 0 0 0;
	    line-height: 16px;
	}
	.zbname{
		 color: #fff;
		 font-size: 16px;
	}
	.zbcount{
		color: #fff;
		font-size: 14px;
	}
	.userlogo {
	    float: left;
	    width: 40px;
	    height: 40px;
	    border-radius: 10px;
	    margin: 20px;
	}
</style>

很简单吧!

相关推荐
2501_9159090620 小时前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
游戏开发爱好者82 天前
App Store 上传 IPA 自动化,.p8 密钥认证与 CI/CD 接入实战
android·运维·ci/cd·小程序·uni-app·自动化·iphone
游戏开发爱好者82 天前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
AI_AGENT_DEV_AI2 天前
原生 APP 开发的开发优点
uni-app
JackieDYH3 天前
uniapp-通知滚动组件+轮播图组件封装-案例
uni-app·轮播图·通知
2501_915921434 天前
appuploader-cli 命令行上传 IPA 到 App Store Connect upload CI 集成
android·ci/cd·小程序·https·uni-app·iphone·webview
结网的兔子4 天前
【前端开发】UniApp 项目地图选型与Web-APP跨端迁移方案
前端·uni-app
2501_916007475 天前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
PedroQue995 天前
uni-app路由插件化:解锁高效开发新姿势
前端·uni-app
2501_915909065 天前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操
android·ios·小程序·https·uni-app·iphone·webview