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>

很简单吧!

相关推荐
小时前端9 小时前
微信小程序选不了本地文件?用 web-view + H5 一招搞定
前端·微信小程序·uni-app
Mr_li1 天前
给 Vue 开发者的 uni-app 快速指南
vue.js·uni-app
anyup1 天前
🔥2026最推荐的跨平台方案:H5/小程序/App/鸿蒙,一套代码搞定
前端·uni-app·harmonyos
Mintopia2 天前
Vue3 项目如何迁移到 uni-app x:从纯 Web 到多端应用的系统指南
uni-app
Mintopia2 天前
uni-app x 发展前景技术分析:跨端统一的新阶段?
uni-app
不爱说话郭德纲3 天前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
HashTang4 天前
【AI 编程实战】第 12 篇:从 0 到 1 的回顾 - 项目总结与 AI 协作心得
前端·uni-app·ai编程
JunjunZ4 天前
uniapp 文件预览:从文件流到多格式预览的完整实现
前端·uni-app
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
TT_Close5 天前
“啪啪啪”三下键盘,极速拉起你的 uni-app 项目!
vue.js·uni-app·前端工程化