vue中touch和click共存的解决方式


Posted in Javascript onJuly 28, 2020

在vue开发手机端项目时,我们经常会遇到touch和click共存的情况,比如城市选择页面的字母滑动

vue中touch和click共存的解决方式

touch事件在手机端会触发浏览器滑动,所以应给touch事件添加阻止默认行为touchmove.prevent。注意阻止默认行为事件不要添加在touchstart事件上,会影响到click事件的发生。

touch事件和click事件发生先后顺序:

touchstart,touchmove,touchend,click

补充知识:touchstart与click同时触发

产生冲突的原因

我们可以给某个元素同时绑定 touchstart 和 click 事件,但这将会导致本篇文章解决的问题 ? 这两个事件在移动设备上会发生冲突。

由于移动设备能够同时识别 touchstart 和 click 事件,因此当用户点击目标元素时,绑定在目标元素上的 touchstart 事件与 click 事件(约300ms后)会依次被触发,也就是说,我们所绑定的回调函数会被执行两次!。这显然不是我们想要的结果。

解决方案

(1)原生JS

方法一:

使用事件对象中的 preventDefault 方法,preventDefault 方法的作用在于:阻止元素默认事件行为的发生,但有意思的是,当我们在目标元素同时绑定 touchstart 和 click 事件时,在 touchstart 事件回调函数中使用该方法,可以阻止后续 click 事件的发生。

const Button = document.getElementById("targetButton")
Button.addEventListener("touchstart", e => {
 e.preventDefault()
 console.log("touchstart event!")
})
 
Button.addEventListener("click", e => {
 e.preventDefault()
 console.log("click event!")
})

方法二:

基于功能检测绑定事件

我们可以通过判断浏览器是否支持 touchstart 事件来封装元素的点击事件,这样客户端会根据当前环境判定元素应该绑定的事件类型,代码如下:

const Button = document.getElementById("targetButton")
const clickEvent = (function() {
 if ('ontouchstart' in document.documentElement === true)
 return 'touchstart';
 else
 return 'click';
})();
 
Button.addEventListener(clickEvent, e => {
 console.log("things happened!")
})

(2) VUE解决方案:

HTML

<div class="comment-text" 
   @touchstart.prevent="gtouchstart(XXX)"
   @touchend.prevent="triggerReply(XXXX)">
   {{ item.content}}
 </div>

JS

data: function () {
  return {
     Loop: 0
   };
 }
gtouchstart: function (XXXX) {
    let self = this;
    //执行长按的内容
    self.Loop = setTimeout(function () {
      self.Loop = 0;
      //XXXXXXXXXXXXXXX
    }, 500);
    return false;
  },
  triggerReply: function (XXXX) {
    let self = this;
    clearTimeout(self.Loop);
    //这里click内容
    if (self.Loop !== 0) {
       //XXXXXXXXXXXXXXX
    }
    return false;
  },

添加 touchstart.prevent,组织click事件。

点击事件顺序

点击事件可以分解成多个事件

在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend -->click

以上这篇vue中touch和click共存的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 插件学习(三)
Aug 06 Javascript
JSON无限折叠菜单编写实例
Dec 16 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
JavaScript中的数据类型转换方法小结
Oct 26 Javascript
详解JavaScript语言的基本语法要求
Nov 20 Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 Javascript
详解在网页上通过JS实现文本的语音朗读
Mar 28 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 #Javascript
JavaScript中window和document用法详解
Jul 28 #Javascript
vue中echarts引入中国地图的案例
Jul 28 #Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 #Javascript
JavaScript文档加载模式以及元素获取
Jul 28 #Javascript
javascript实现贪吃蛇小游戏
Jul 28 #Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 #Javascript
You might like
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
Prototype使用指南之array.js
2007/01/10 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
用python制作游戏外挂
2018/01/04 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
大学生应聘自荐信
2013/10/11 职场文书
新闻学毕业生自荐信
2013/11/15 职场文书
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
社保转移委托书范本
2014/10/08 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
致运动员加油稿
2015/07/21 职场文书
详解Python牛顿插值法
2021/05/11 Python
解析MySQL索引的作用
2022/03/03 MySQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python