当前位置: 首页 > 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.dtcms.com/a/279068.html

相关文章:

  • Nacos 技术研究文档(基于 Nacos 3)
  • 国内MCP服务器搜索引擎有哪些?MCP导航站平台推荐
  • Docker配置国内镜像源
  • SpringBoot整合MongoDB
  • 链表算法之【获取链表开始入环的节点】
  • Codeforces Round 1019 (Div. 2) A-D
  • Windows下安装nvm管理多个版本的node.js
  • 在项目中集成开源的表单设计器FcDesigner源码
  • 「源力觉醒 创作者计划」_文心开源模型(ERNIE-4.5-VL-28B-A3B-PT)使用心得
  • linux系统下Ollama 模型下载出现 “no space left on device” 错误(非Docker)怎么删缓存/没下完的模型?
  • Docker入门基础
  • Vue+axios
  • Cadence操作说明
  • STM32固件升级设计——SD卡升级固件
  • 论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
  • 如何在 React + TypeScript 中实现 JSON 格式化功能
  • 【React Natve】NetworkError 和 TouchableOpacity 组件
  • MySQL的可重复读隔离级别实现原理分析
  • 银河麒麟KYSEC安全机制详解
  • 在echarts中legend中设置rich中第二项的宽度不起作用的处理方案。
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例
  • 鸿蒙Next开发,配置Navigation的Route
  • 26-计组-多处理器
  • HCIA认证核心知识体系全解析
  • OpenCV计算机视觉实战(15)——霍夫变换详解
  • Mars3d的走廊只能在一个平面的无法折叠的解决方案
  • UNet 改进(36):引入ELAN-FR模块(通道注意力+空间注意力)
  • 华为OD 消消乐游戏
  • 机器学习/深度学习训练day1
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署