处理vue中的长按事件、点击事件、默认事件冲突

news2024/11/17 21:31:15

写在前面

示例是h5项目。技术栈:vue + vant + nuxt。

知识点简介:

touchstart: // 手指放到屏幕上时触发

touchend: // 手指离开屏幕时触发

touchmove: // 手指在屏幕上滑动式触发

touchcancel: // 系统取消touch事件的时候触发

页面及需求:

历史搜索功能:

  • 单击某条历史记录,把历史内容填入搜索框;
  • 长按某条历史记录:删除;

代码:

html:

<div
  v-for="item in historyList"
  :key="item"
  class="disease-tag"
  @touchstart.prevent="delHistory($event,'deleteItem', item)"
  @touchend.prevent="touchend"
>
  {{ item }}
</div>

data:

longTouch: false, // 判断是否是长按; 

touchstart触发的事件:

// 模拟长按
clearTimeout(this.loop)// 再次清空定时器,防止重复注册定时器(会把点击事件也阻止掉)
this.longTouch = false // 关键
this.loop = setTimeout(() => {
  this.longTouch = true  // 关键
  this.showDialog = true
}, 600)

触屏离开的事件:

touchend() {
  clearTimeout(this.loop) // 清空定时器,防止重复注册定时器
  if(!this.longTouch){
    //如果不是长按,执行点击事件
    this.change(this.curItem)
  }
},

为何要这样写:

div上同时有点击和长按两种事件。

因为vue并没有自带长按事件,我们是通过touchstarttouchend模拟长按,但是长按后又会触发默认事件,比如出现菜单,移动端会出现选择复制;

但是如果直接阻止掉默认事件,click事件也会被阻止掉——无论是直接用@touchstart.prevent的方式阻止,还是在代码中通过event.preventDefault方式阻止;

那么如何才能做到——既阻止默认事件,又正确触发click事件呢?

利用touchstart是在click事件之前触发的特点,结合定时器来解决。

关于这个特点,我们可以简单地打印看一下:

同时绑定这三个事件:

 <div 
   v-for="item in historyList"
   :key="item" @click="click"
   @touchstart="touchstart"
   @touchend="touchend"
 </div> 

打印一下执行顺序:

点击:

长按:

所以完全可以用touchstart来模拟点击事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文教会你何为重绘、回流?

文章目录css图层图层创建的条件重绘(Repaint)回流触发重绘的属性触发回流的属性常见的触发回流的操作优化方案requestAnimationFrame----请求动画帧写在最后学习目标&#xff1a; 了解前端Dom代码、css样式、js逻辑代码到浏览器展现过程了解什么是图层了解重绘与回流了解前端层…

【已失效】免翻在Chrome上使用新必应(New Bing)聊天机器人

已失效&#xff0c;暂时没时间去摸索&#xff0c;大家可以在评论区讨论&#xff0c;其实大家评论的我也尝试过了&#xff0c;并没有找到一个很完美的方式&#xff0c;有时间折腾再更新吧&#xff01;&#xff01; 这里不讲如何加入New Bing内测 文章目录【更新】免翻使用New B…

如何理解虚拟DOM

一、js 操作DOM 假如现在你需要写一个像下面一样的表格的应用程序&#xff0c;这个表格可以根据不同的字段进行升序或者降序的展示。 这个应用程序看起来很简单&#xff0c;你可以想出好几种不同的方式来写。最容易想到的可能是&#xff0c;在你的 JavaScript 代码里面存储这样…

【CSS重点知识】属性计算的过程

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 标题什么是计算机属性确定声明值层叠冲突继承使用默认值总结什么是计算机属性 CSS属性值的计算…

Vue实例生命周期

Vue实例的生命周期就是Vue实例从创建到销毁的全过程。在这个过程中&#xff0c;经历了创建、初始化数据、编译模板、挂载Dom(beforeCreate(){}、created(){}、beforeMount(){}、mounted(){})、渲染→更新→渲染(beforeUpdate(){}、updated(){})、卸载(beforeDestroy(){}、destr…

SVG+CSS动画实现动效(流光、呼吸等效果)

流光效果 绘制流光线条 创建SVG&#xff0c;根据UI给的背景图&#xff0c;定位到图上每条管道&#xff08;即流光线条的路径&#xff09;的起始点以及拐点&#xff0c;绘制折线。绘制折线的时候按照下图方框通过class分组&#xff0c;这几组的光线流动是同时出发的。 svg相关知…

【大学生期末大作业】HTML+CSS+JavaScript — 模仿博客网站设计(Web)

你为什么不亲自下船&#xff0c; 就一次也好啊&#xff0c; 亲眼去看看这个世界。 目录 你为什么不亲自下船&#xff0c; 就一次也好啊&#xff0c; 亲眼去看看这个世界。 关于HTML5&#xff1a; 关于CSS&#xff1a; 关于JavaScript&#xff1a; 一、&#x1f30e;前言…

牛客前端刷题(四)——微信小程序篇

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦! 赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏…

Vue 使用 Vue-socket.io 实现即时聊天应用(Vue3连接原理分析)

目录 前言&#xff1a; 一、新建 Vue3 项目 二、下载相关依赖 2.1 后台服务 2.2 前端连接 2.3 启动项目 2.4 触发与接收事件 2.5 原因分析 三、vue3 使用socket的原理 3.1 socket对象实例 3.2 socket 触发事件 3.3 socket对象监听原生事件 3.4 vue-socket.io 源码解析 …

宝塔面板安装部署Vue项目,Vue项目从打包到上线

前期准备 1.宝塔面板已经成功安装到服务器 2.vue项目已经成功开发完成 开始 在宝塔面板中选择PHP项目添加站点&#xff0c;站点PHP版本设置为纯静态&#xff0c;输入域名或者IP 这是后你会获得一个网站文件目录 点击根目录进入目录后&#xff0c;若你的Vue项目么有打包好需…

可视化大屏的几种屏幕适配方案,总有一种是你需要的

假设我们正在开发一个可视化拖拽的搭建平台&#xff0c;可以拖拽生成工作台或可视化大屏&#xff0c;或者直接就是开发一个大屏&#xff0c;首先必须要考虑的一个问题就是页面如何适应屏幕&#xff0c;因为我们在搭建或开发时一般都会基于一个固定的宽高&#xff0c;但是实际的…

海康摄像头web无插件3.2,vue开发,Nginx代理IIS服务器

在vue中实现海康摄像头播放&#xff0c;采用海康web无插件3.2开发包&#xff0c;采用Nginx代理IIS服务器实现&#xff1b; 1 摄像头要求&#xff0c;支持websocket 2 Nginx反向代理的结构 3 vue前端显示视频流代码 参考地址&#xff1a; https://blog.csdn.net/Vslong/artic…

【Vue全家桶】新一代的状态管理--Pinia

&#x1f373;作者&#xff1a;贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛\color{#FF0000}{贤蛋 大眼萌 &#xff0c;一名很普通但不想普通的程序媛}贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛&#x1f933; &#x1f64a;语录&#xff1a;多一些不为什么的…

【微信小程序】一文带你了解数据绑定、事件绑定以及事件传参、数据同步

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列专栏&#xff1a;小程序开发基础教程 &#x1f451;名言警句&#xff1…

项目完成后的打包流程(超级详细)

* 打包&#xff1a; * 将多个文件压缩合并成一个文件 * 语法降级 * less sass ts 语法解析, 解析成css * .... * 打包后&#xff0c;可以生成&#xff0c;浏览器能够直接运行的网页 > 就是需要上线的源码&#xff01; 最简单的打包流程&#xff1a; 首先我们项目…

vue项目实现前端预览word和pdf格式文件

最近做vue项目遇到一个需求&#xff0c;就是前端实现上传word或pdf文件后&#xff0c;后端返回文件对应的文件流&#xff0c;前端需要在页面上展示出来。word预览简单一些&#xff0c;pdf预览我试过pdfjs,vue-pdf总是报各种奇奇怪怪的bug,但最终总算解决了问题&#xff0c;先看…

HttpServletResponse 类

a)HttpServletResponse 类的作用 HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来&#xff0c;Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息&#xff0c;HttpServletResponse 表示所有响应…

解决TypeError: Cannot read properties of null (reading ‘xxx‘)的错误

文章目录1. 文章目录2. 分析问题3. 解决错误4. 问题总结1. 文章目录 今天测试小姐姐&#xff0c;在测试某页面时&#xff0c;报出如下图的错误&#xff1a; TypeError: Cannot read properties of null (reading type)at w (http://...xxx.../assets/index.a9f96e7f.js:1052:19…

前端基础,超全html常用标签大汇总

<html></html>标签&#xff0c;整个html文件都会放在html标签里面 <head></head>标签&#xff0c;表示网页的头部信息&#xff0c;一般是为浏览器提供对应的网站需要的相关信息&#xff0c;浏览器中是不会显示的&#xff1b;比如&#xff1a;标题titl…

vue中PC端使用高德地图 -- 实现搜索定位、地址标记、弹窗显示定位详情

PC端高德地图使用步骤&#xff1a; 1、注册并登录高德开放平台获取 2、安装高德依赖&#xff08;amap-jsapi-loader&#xff09; 3、初始化地图 4、首次打开地图获取当前定位并标记 5、根据已有地址自动定位到指定地址并标记 6、新增、清除标记及自定义信息窗体 7、鼠标点击地…