vue中的长按事件和点击事件冲突

<div>
  <img src="/static/images/poi-marker-default.png" @touchstart.prevent="touchin()" @touchend.prevent="clickhandle()" >
</div>
data() {
  return {
    Loop:0
  }
},
methods: {
  touchin(index){ // 长按事件,按住后等待指定事件触发
    let that=this;
    this.Loop = setTimeout(function() {
      that.Loop = 0;
      console.log("长按触发")
    }, 500);
    return false;

  },
  clickhandle() { // 模拟点击事件(点击后迅速抬起)
    let that=this;
    clearTimeout(this.Loop);
    if(that.Loop!==0){
      console.log("点击事件")
    }
    return false;
  }
}

ps:最近一直在做移动端的项目,先说下需求,点击图片预览,长按删除,之前在图片上帮定了点击事件和长按事件,但是会有冲突,由于智商不够,百度半天才解决的,最后直接把点击事件给去了,直接用定时器械的,记录下,下次直接用就好了

1,触屏事件

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

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

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

touchcancel: //系统取消touch事件的时候触发,这个好像比较少用

由于这次不需要计算移动的距离,所以一只用touchstart和touchend这两个事件

<img    v-for="(item,index) in imgurl" :src="item"  @touchstart.prevent="touchin(index)" @touchend.prevent="cleartime(imgurl[index])" >
.prevent是阻止浏览器的默认行为,如果不需要的话,就不用添加了,根据自己的实际情况

2,直接在methods里写长按方法和点击事件

一定在data里声明Loop =0;不然不管用

500表示触屏时间,可以根据实际情况写,只要达到这个时间就会触发setTimeout里的事件
touchin(index){
        var that=this;
        this.Loop = setTimeout(function() {
          that.Loop = 0;
          //执行长按要执行的内容,如弹出菜单
          MessageBox.confirm(‘是否确认删除‘).then(action => {
            that.imgurl.splice(index,1)

          })
        }, 500);
        return false;

      },

触屏离开的事件

cleartime(index) {
        var that=this;
        clearTimeout(this.Loop);
        if(that.Loop!=0){
          //这里写要执行的内容(尤如onclick事件)
          that.previewPicture(index)
        }
        return false;

      },

原文地址:https://www.cnblogs.com/hfultrastrong/p/12083622.html

时间: 2024-08-25 16:20:40

vue中的长按事件和点击事件冲突的相关文章

在Activity中响应ListView内部按钮的点击事件

最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在Activity中实现该接口,从而实现对点击事件的响应. 下班后思考了一下,觉得有两种方式都能比较好的实现:使用接口回调和使用抽象类回调. 正好可以复习一下接口和抽象类的区别,于是写了两个Demo: 1.使用接口回调: Adapter类 1 package com.ivan.adapter; 2 3

在Activity中响应ListView内部按钮的点击事件的两种方法

转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在Activity中实现该接口,从而实现对点击事件的响应. 下班后思考了一下,觉得有两种方式都能比较好的实现:使用接口回调和使用抽象类回调. 正好可以复习一下接口和抽象类的区别,于是写了两个Demo: 1.

[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

使用setTimeout实现双击事件 例如,这样: let div = document.getElementById("div"); doubleClick(div, function (event) { console.log('双击') }) function doubleClick(ele, fn) { // 省略参数合法性的判断 let event = new Event("doubleClick"); // 自定义双击事件(可以使用CustomEvent

JS如何将拖拉事件与点击事件分离?

帖子:http://bbs.csdn.net/topics/390785395?page=1#post-397369340 如何将拖拉事件跟点击事件分离? 需要做到:拖拉时不触动点击事件 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> js拖拽组件1 </title> <script type="text/javascript" src=&qu

HTML5 Canvas ( 事件交互, 点击事件为例 ) isPointInPath

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">

JS怎样将拖拉事件与点击事件分离?

帖子:http://bbs.csdn.net/topics/390785395?page=1#post-397369340 怎样将拖拉事件跟点击事件分离? 须要做到:拖拉时不触动点击事件 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> js拖拽组件1 </title> <script type="text/javascript" src=&qu

HTML5 Canvas ( 事件交互, 点击事件为例 ) isPointInPath(转)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">

ListActivity的Item长按事件与点击事件

一.设置长按响应事件 在onCreate方法中添加下面代码: this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.mak

ListView的长按事件和点击事件冲突的解决办法

在实际开发中,我们对一个item需要同时做点击和长按功能的时候可能会遇到冲突问题,就是我只想实现长按功能,不实现点击功能,这个时候就需要将长按事件中的方法返回值设为true, 例子如下: imageView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; }}); 这样就解决了点击和长按同时响应的问题.