IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> uniapp左滑删除 -> 正文阅读

[JavaScript知识库]uniapp左滑删除

uniapp左滑删除

欢迎使用ay-operate插件

最近有需求为:左滑删除,整理插件代码如下:

1.ay-operate插件

可去uniapp插件市场的操作组件:左滑删除,自定义任意内容插件页面下载.

属性
属性类型说明
data_transitObject需要传递数据的对象
itemObject显示对象,可不传参

下面是插件的 代码片.

<template>
	<view>
		<view class="box-slideLeft" >
			<view class="touch-item touch-slideLeft " @touchstart="touchS" @touchmove="touchM" @touchend="touchE"  :style="item_show.txtStyle">
				<slot />
			</view>
			<view class="touch-item del-box-touch-slideLeft cf-shuCenter"  @click="delItem(item_show)">
				<view class="iconfont icon-shanchu"></view>
			</view>
		</view>
	</view>
</template>
<script>
	export default {
		components: {
		},
		props: {
			//可不传参
			item: {
				type: Object,
				default () {
					return {}
				}
			},
			data_transit: {
				type: Object,
				default () {
					return {}
				}
			},
		},
		computed: {
		},
		data() {
			return {
				item_show : {},
				delBtnWidth: 60, //删除按钮宽度单位(rpx)
				startX: '',
			};
		},
		created:function(){
			//专门处理检查对象中,某字段是否存在的,如果存在返回 true 不存在返回 false
			let that = this ;
			let item = that.item ;
			if(!item.hasOwnProperty("txtStyle")){
				this.$set(this.item,'txtStyle','');//不需要初始化了
			}
			this.item_show = this.item ;
		},
		watch: {
			item(e){
				this.item_show = e ;
			},
		},
		methods: {
			//点击删除按钮事件
			delItem: function(e) {
				let that = this;
				let data ={
					item : e ,
					data : that.data_transit ,
				};
				this.$emit('delItem', data);
			},
			touchS: function(e) {
				let that = this;
				if (e.touches.length == 1) {
					//设置触摸起始点水平方向位置
					this.startX = e.touches[0].clientX	
				}
			},
			touchM: function(e) {
				let that = this;
				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";
						}
					}
					//获取手指触摸的是哪一项
					that.item_show.txtStyle = txtStyle;	
				}
			},
			touchE: function(e) {
				let that = this;
				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";
					//获取手指触摸的是哪一项
					that.item_show.txtStyle = txtStyle;
				}
			},
		}
	}
</script>
<style lang="scss">
	@import './iconfont.css';//便于有删除图标
	.box-slideLeft {
		view {
			box-sizing: border-box;
		}
		position: relative;
		overflow: hidden;
		.touch-item {
			position: absolute;
			top: 0;
			padding: 10px 10px 10px;
			background-color: #FFFFFF;
			// border-radius: 10px;
			overflow: hidden;
		}
		.touch-slideLeft {
			position: relative;
			width: 100%;
			z-index: 5;
			transition: left 0.2s ease-in-out;
			white-space: nowrap;
			overflow: hidden;
			text-overflow: ellipsis;
		}
		.del-box-touch-slideLeft {
			right: 0;
			float: left;
			width: 70px;
			height: 100%;
			line-height: 101px;
			background-color: #EA5863;
			border-radius: 0 10px 10px 0;
			color: #fff;
			font-size: 18px;
			font-weight: lighter;
			text-align: center;
		}
		.icon-shanchu{
			font-size: 44upx;
		}
		.cf-shuCenter{
			display: flex;
			flex-direction: column;
			justify-content: center;
			align-items: center;
		}
	}
</style>

  

    2.引用插件

    可去uniapp插件市场的操作组件:左滑删除,自定义任意内容插件页面,下载项目

    项目结构如下:
    在这里插入图片描述

    下面index.vue是引用插件的 代码片.

    <template>
    	<view>
    		<view  v-for="(item,index) in result" :key="index" >
    			<delSlideLeft :item="item" :data_transit="{index:index,item:item}" @delItem="delItem">
    				<view style="color: #000000;">
    					<view >
    						<view >{{item.name}}</view>
    						<view >{{item.name}}</view>
    					</view>
    					<view >
    						<view >{{item.name}}</view>
    					</view>
    				</view>
    			</delSlideLeft>
    		</view>
    	</view>
    </template>
    <script>
    	import delSlideLeft from '@/components/ay-operate/del_slideLeft.vue'
    	export default {
    		components: {
    			delSlideLeft,
    		},
    		data() {
    			return {
    				// 前台用户标志
    				result: [{
    					name: '左滑删除11111111111',
    				}, {
    					name: '左滑删除22222222222',
    				}, 
    				{
    					name: '左滑删除333333333',
    				}, ],
    			};
    		},
    		methods: {
    			//点击删除按钮事件
    			delItem: function(e) {
    				let that = this;
    				that.result.splice(e.data.index,1)
    			},
    		}
    	}
    </script>
    <style lang="scss">
    </style>
    

    效果图

    在这里插入图片描述

      JavaScript知识库 最新文章
    ES6的相关知识点
    react 函数式组件 & react其他一些总结
    Vue基础超详细
    前端JS也可以连点成线(Vue中运用 AntVG6)
    Vue事件处理的基本使用
    Vue后台项目的记录 (一)
    前后端分离vue跨域,devServer配置proxy代理
    TypeScript
    初识vuex
    vue项目安装包指令收集
    上一篇文章      下一篇文章      查看所有文章
    加:2021-09-03 11:48:44  更:2021-09-03 11:49:02 
     
    开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
    教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
    数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

    360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:49:27-

    图片自动播放器
    ↓图片自动播放器↓
    TxT小说阅读器
    ↓语音阅读,小说下载,古典文学↓
    一键清除垃圾
    ↓轻轻一点,清除系统垃圾↓
    图片批量下载器
    ↓批量下载图片,美女图库↓
      网站联系: qq:121756557 email:121756557@qq.com  IT数码