首页 前端知识 解决@touchstart和@click事件触发冲突问题,可使@touchstart和@click分别执行

解决@touchstart和@click事件触发冲突问题,可使@touchstart和@click分别执行

2024-05-31 20:05:17 前端知识 前端哥 851 553 我要收藏

一般出现在我们给某个元素同时绑定 touchstart 和 click 事件,比如拖拽事件同时添加返回上一页功能;

先看代码:

<div
    class="suspension"
    :style="{
      position: 'fixed',
      left: `${Left}px`,
      top: `${Top}px`,
    }"
    @touchstart="onTouchStart"
    @touchmove="onTouchMove"
    @touchend="onTouchEnd"
    @click.stop="handleClick"
  >
    <image :src="host + 'dev/0ae5ae9bf2342342342bc494'" class="suspension_img" />
    <p class="goback">返回</p>
  </div>

下列是vue3的语法:

<script lang="ts" setup>
import { useRouter } from "vue-router";
const router = useRouter();
//开始拖动
const onTouchStart = (e: any) => {
};
//拖动停止
const onTouchMove = (e: any) => {
  e.preventDefault();
}
//拖动结束
const onTouchEnd = (e: any) => {

}
//点击事件
const handleClick = (e) => {
   router.go(-1);
}
</script>

只用在@click加stop,且在onTouchMove上添加阻止点击事件触发——e.preventDefault();

即可完成拖动事件@touchstart和点击事件@click分别执行功能,且可以修复拖动按钮时会导致页面滚动问题。

补充:

如果需要阻止点击事件不触发,只触发@touchstart;代码如下:

<div
    class="suspension"
    :style="{
      position: 'fixed',
      left: `${Left}px`,
      top: `${Top}px`,
    }"
    @touchstart.stop.prevent="onTouchStart"
    @touchmove="onTouchMove"
    @touchend="onTouchEnd"
    @click="handleClick"
  >
    <image :src="host + 'dev/0ae5ae9bf66cs32424234494'" class="suspension_img" />
    <p class="goback">返回</p>
  </div>

或者

@touchstart不加修饰符,在onTouchStart点击事件中触发阻止click事件

//触摸事件开启
const onTouchStart = (e: any) => {
  e.preventDefault();
};

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10302.html
标签
评论
发布的文章

npmjs官网(查询依赖包)

2024-06-07 00:06:56

npx使用及原理

2024-06-07 00:06:36

npm 包管理工具

2024-06-07 00:06:33

vue 思极地图开发

2024-06-07 00:06:28

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!