移动端长按进入编辑状态

这套代码是基础vue中自定义指令directive编写的
功能:如果在一个位置长按两秒(不动)则进入自定义指令回调方法,如果在一个位置长按然后带有拖动(滚动行为)则不进入自定义指令回调方法
场景:相册的长按进入编辑功能

创建:src/plugins/longclick.js

let timerId = null;
let isMoving = false;

const onTouchStart = (el, binding) => {
  const { value } = binding;

  // 开始计时
  timerId = setTimeout(() => {
    if (!isMoving && typeof value === "function") {
      value();
    }
  }, 800);
};

const onTouchMove = () => {
  isMoving = true;
  clearTimeout(timerId);
};

const onTouchEnd = () => {
  clearTimeout(timerId);
  isMoving = false;
};

const longclick = {
  mounted(el, binding) {
    el.addEventListener("touchstart", () => {
      onTouchStart(el, binding);
    });
    el.addEventListener("touchmove", onTouchMove);
    el.addEventListener("touchend", onTouchEnd);
  },
  unmounted(el) {
    el.removeEventListener("touchstart", () => onTouchStart(el, binding));
    el.removeEventListener("touchmove", onTouchMove);
    el.removeEventListener("touchend", onTouchEnd);
  },
};

export default longclick;

main.js导入

注意点:使用时候一定加上:v-自定义指令名称

import { createApp } from "vue";
import App from "./App.vue";
import longclick from "@/plugins/longclick"; //导入自定义指令方法
const app = createApp(App);
app.directive("longclick", longclick); //挂载全局
app.mount("#app");

组件使用

<template>
	<div class="main">
		<div v-for="item in 1000">
			<img src="您的图片地址" class="img" v-longclick="handle"></img>
		</div>
	</div>
</template>

<script setup>
const handle = ()=>{
	console.log("进入了编辑状态")
}
</script>

<style>
.main{
	width:100%;
	height:500px;
	overflow:auto; //一定要设置auto才有滚动条
}
.img{
	display:block;
	width:100%;
	height:100px; //内容高度比父盒子搞,出现滚动条
}
</style>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值