uniapp自定义左滑删除组件

本来是用movable-area配合movable-view写的,写完发现这个会有一些问题,所以就自己写洛

创建组件components/MySwipeActionItem/MySwipeActionItem.vue

touchmove: 手指移动触发

touchstart: 手指触摸到屏幕触发

touchend: 手指离开屏幕触发

<view class="SwipeActionBox">
	<view class="SwipeActionItem" @touchmove="touchmove" @touchstart="touchstart"
				@touchend="touchend"
				:style="[{'width':'calc(100% + '+btnWidth+'px)'},{'transform':'translateX('+offsetX+'px)'}]">
		<view class="left" :style="{'width':'calc(100% - '+btnWidth+'px)'}">
			<slot name="left" />
		</view>
		<view class="right" :style="{'width': btnWidth+'px'}">
			<slot name="right"></slot>
		</view>
	</view>
</view>

css部分

 

.SwipeActionBox {
		position: relative;
		width: 100%;
		height: 152rpx;
		overflow: hidden;

		.SwipeActionItem {
			height: 100%;
			display: flex;
		}
	}

js部分

export default {
		props: {
            // 接收的按钮宽度
	        btnWidth: {
		        type: [String, Number],
		        default: 0
	        }
        },
		data() {
			return {
				startX: 0,  // 开始接触点
				offsetX: 0,  // 移动距离
                oldOffsetX: 0, // 记录上一次偏移的位置
			}
		},
		onLoad() {

		},
		methods: {
            touchstart(e) {
				this.startX = e.touches[0].pageX
			},
            touchmove(e) {
				var currX = e.touches[0].pageX //手指当前的X轴坐标
				var slideX = Math.abs(currX - this.startX) //X轴移动的距离
				var oldOffsetX = this.oldOffsetX //上一次触摸结束时的偏移量
                // 这里加上上一次的位置防止每次触发都会闪一下回到初始状态在进行移动
				var offsetX = currX - this.startX + oldOffsetX //计算手指在X轴上移动的距离
                // 移动范围大于按钮不进行移动了,小于同理,防止移出范围区域
				if (offsetX < -this.btnWidth) offsetX = -this.btnWidth
				if (offsetX > 0) offsetX = 0
                // 修改偏移量
				this.offsetX = offsetX
			},
            touchend() {
				var offsetX = this.offsetX //当前偏移量
				//当前手指松开的时候偏移量大于按钮宽度 / 2则自动完全展开,否则自动关闭
                // 防止移动一半卡在半路就不太好了
				if (Math.abs(offsetX) > this.btnWidth/ 2) {
					offsetX = -this.btnWidth
				} else {
					offsetX &#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值