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基础语法实例入门
Dec 23 Javascript
JavaScript中的标签语句用法分析
Feb 10 Javascript
javascript页面倒计时实例
Jul 25 Javascript
js生成随机数(指定范围)的实例代码
Jul 10 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
Vue中的字符串模板的使用
May 17 Javascript
VUE安装使用教程详解
Jun 03 Javascript
JavaScript实现简单随机点名器
Nov 21 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
给ECShop添加最新评论
2015/01/07 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
python搜索包的路径的实现方法
2019/07/19 Python
使用python实现多维数据降维操作
2020/02/24 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
中学生获奖感言
2014/02/04 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
2015年招聘工作总结
2014/12/12 职场文书
交警失职检讨书
2015/01/26 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
javascript函数式编程基础
2021/09/15 Javascript