vue移动端左滑删除

效果

在这里插入图片描述

代码

<template>
	<div class="delete">
		<div class="slider">
		   <div class="content" 
			  @touchstart='touchStart'
			  @touchmove='touchMove'
			  @touchend='touchEnd'
			  :style="deleteSlider"
		   >
		   </div>
		   <div class="remove" ref='remove'>删除</div>
		</div>
    </div>
</template>

<script>
export default {
	data(){
		return {
			startX:0,   //触摸位置
            endX:0,     //结束位置
            moveX: 0,   //滑动时的位置
            disX: 0,    //移动距离
            deleteSlider: '',//滑动时的效果,使用v-bind:style="deleteSlider"
		}
	},
	methods:{
		touchStart(ev){
			ev= ev || event
			//tounches类数组,等于1时表示此时有只有一只手指在触摸屏幕
			if(ev.touches.length == 1){
				// 记录开始位置
				this.startX = ev.touches[0].clientX;
			}
		},
		touchMove(ev){
			ev = ev || event;
				//获取删除按钮的宽度,此宽度为滑块左滑的最大距离
			let wd=this.$refs.remove.offsetWidth;
			if(ev.touches.length == 1) {
				// 滑动时距离浏览器左侧实时距离
				this.moveX = ev.touches[0].clientX
		
				//起始位置减去 实时的滑动的距离,得到手指实时偏移距离
				this.disX = this.startX - this.moveX;
				console.log(this.disX)
				// 如果是向右滑动或者不滑动,不改变滑块的位置
				if(this.disX < 0 || this.disX == 0) {
					this.deleteSlider = "transform:translateX(0px)";
				// 大于0,表示左滑了,此时滑块开始滑动 
				}else if (this.disX > 0) {
						//具体滑动距离我取的是 手指偏移距离*5。
					this.deleteSlider = "transform:translateX(-" + this.disX*5 + "px)";
					
					// 最大也只能等于删除按钮宽度 
					if (this.disX*5 >=wd) {
						this.deleteSlider = "transform:translateX(-" +wd+ "px)";
						
					}
				}
			}
		},
		touchEnd(ev){
			ev = ev || event;
			let wd=this.$refs.remove.offsetWidth;
			if (ev.changedTouches.length == 1) {
				let endX = ev.changedTouches[0].clientX;
				
				this.disX = this.startX - endX;
				console.log(this.disX)
				//如果距离小于删除按钮一半,强行回到起点
				
				if ((this.disX*5) < (wd/2)) {
					
					this.deleteSlider = "transform:translateX(0px)";
				}else{
					//大于一半 滑动到最大值
						this.deleteSlider = "transform:translateX(-"+wd+ "px)";
				}
			}
		}
	},
}
</script>

<style scoped>
    .slider{
        width: 500px;
        height:100px;
        position: relative;
        user-select: none;
    }
	.content{
	    position: absolute;
	    left: 0;
	    right: 0;
	    top: 0;
	    bottom: 0;
	    background:green;
	    z-index: 100;
	    transition: 0.3s;
	}
	.remove{
	    position: absolute;
	    width:100px;
	    background:red;
	    right: 0;
	    top: 0;
	    color:#fff;
	    text-align: center;
	    font-size: 16px;
	    line-height: 100px;
	}
 
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YangYun_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值