当前位置: 首页 > news >正文

VUE3 添加长按手势

最近在最海报分享,需要用到长按保存本地

首先移动端并没有直接长按事件,所以我们需要自己模拟一个长按事件。直接上代码

import { App, DirectiveBinding, VNode } from "vue";export default {install: (app: App) => {app.directive("longPress", {mounted(el: any,binding: DirectiveBinding<any>,vnode: VNode<any, any, { [key: string]: any }>,prevVNode: null) {console.log(binding);if (typeof binding.value !== "function") {console.log(`[longpress:] provided expression '${binding.value}' is not afunction, but has to be `);} else {let timer: ReturnType<typeof setTimeout> | null = null;const start = (e: MouseEvent | ToggleEvent) => {if ((<MouseEvent>e).button !== 0 && e.type === "click") {return;}if (timer == null) {timer = setTimeout(() => {handler();}, 500);}};const cancel = () => {if (timer !== null) {clearTimeout(timer);timer = null;}};const handler = () => {binding.value();};// 添加事件监听器el.addEventListener("mousedown", start);el.addEventListener("touchstart", start);// 取消计时器el.addEventListener("click", cancel);el.addEventListener("mouseout", cancel);el.addEventListener("touchend", cancel);el.addEventListener("touchcancel", cancel);}},unmounted(el: any,binding: DirectiveBinding<any>,vnode: VNode<any, any, { [key: string]: any }>,prevVNode: null) {// 添加事件监听器el.removeEventListener("mousedown");el.removeEventListener("touchstart");// 取消计时器el.removeEventListener("click");el.removeEventListener("mouseout");el.removeEventListener("touchend");el.removeEventListener("touchcancel");},});},
};

在 main.ts 文件添加引用

import longPress from "./utils/long-press/index";
createApp(App).use(longPress).mount("#app");

实际使用

    // 长按手势 长按 0.5 秒触发<div v-longPress="longPress">长按手势</div>function longPress() {console.log("长按手势触发")}
http://www.lryc.cn/news/588190.html

相关文章:

  • Web 前端面试
  • C++-linux 7.文件IO(一)系统调用
  • Day34 Java方法05 可变参数
  • OSPF高级特性之GR
  • 现有医疗AI记忆、规划与工具使用的创新路径分析
  • 【Java笔记】七大排序
  • Android Studio C++/JNI/Kotlin 示例 二
  • 清除 Android 手机 SIM 卡数据的4 种简单方法
  • 如何将数据从一部手机传输到另一部手机?
  • SSH 登录失败,封禁IP脚本
  • Oracle 学习笔记
  • 【橘子分布式】Thrift RPC(理论篇)
  • LINUX714 自动挂载/nfs;物理卷
  • 基于STM32的智能抽水灌溉系统设计(蓝牙版)
  • 前端开发中的常见问题及解决方案
  • 数据结构——优先队列(priority_queue)的巧妙运用
  • 渗透第一次总结
  • 【Python办公】Python如何批量提取PDF中的表格
  • 前端基础之《Vue(22)—安装MongoDB》
  • 【Java EE初阶 --- 网络原理】初识网络
  • 第十七节:第五部分:网络通信:TCP通信-支持与多个客户端同时通信
  • 如何使用Cisco DevNet提供的免费ACI学习实验室(Learning Labs)?(Grok3 回答)
  • 笔试——Day6
  • CISSP知识点汇总- 通信与网络安全
  • 内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
  • 密码学中立方攻击的另类应用
  • 安全初级(一)
  • 多租户云环境下的隔离性保障:虚拟化、容器、安全组如何协同防护?
  • git 访问 github
  • 【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍