首页 > 其他分享 >[常用函数]模拟单击双击

[常用函数]模拟单击双击

时间:2023-03-08 16:47:39浏览次数:30  
标签:单击 any 双击 事件 dbclick click 模拟

小程序需要模拟双击事件,如果一个元素既绑定了单击事件,又绑定了模拟的双击事件,如何区分两个事件何时触发呢?

 

1. 设计一个点击事件分发函数

如果用户两次点击的时间间隔不大于300ms,认为发生了双击行为。 当用户点击一次后,等400ms,如果用户没有发生第二次点击,则认为是单击
export function useClickDispatch(fn: ClickFn, ctx?: any) {
  const { click, dbclick } = fn;
  let lastClickTime = 0;
  let timer: NodeJS.Timer;
  return (...args: any[]) => {
    // 清除单击事件
    clearTimeout(timer);
    const currentTime = Date.now();
    const gap = currentTime - lastClickTime;
    // 触发双击事件
    if (gap > 0 && gap < 300) {
      return dbclick?.apply(ctx, args);
    }
    lastClickTime = currentTime;
    // 400ms后触发单击事件
    return (timer = setTimeout(() => {
      click?.apply(ctx, args);
    }, 400));
  };
}

// ------ types ------
export interface ClickFn {
  click?: Function; // 单击事件
  dbclick?: Function; // 双击事件
}

 

2. 使用函数进行单击双击事件分发

下面是vue中的例子: HTML 代码:
<template>
  <div @click="onClick">需要点击的元素</div>
</template>

javascript代码:

export default Vue.extend({
  data() {
    return {
      clickDispatch: null as any,
    };
  },
  created() {
    this.clickDispatch = useClickDispatch({ click: this.click, dbclick: this.dbclick }, this);
  },
  methods: {
    onLikeClick(e: any) {
      this.clickDispatch?.(e);
    },
    dbclick(e: any) {
      // 这里写双击需要处理的函数
    },
    click(e: any) {
      // 这里写单击需要处理的函数
    },
  },
});
</script>

 

   

标签:单击,any,双击,事件,dbclick,click,模拟
From: https://www.cnblogs.com/zhoulixue/p/17192526.html

相关文章

  • Simulate arrow keys on mobile phone 手机上模拟键盘的上下左右按钮
    <textareaplaceholder="testtouchmove"ontouchstart="onTouchStart(event)"ontouchmove="onTouchMove(event)"ontouchend="onTouchEnd(event)"></textarea>......
  • 20230307模拟赛
    20230307A根据题面信息可知图为奇环树,考虑将环上的点和树上的点分开处理,预处理出来环上的点。如果先去想如何处理树上的点,可以想到一种\(dp\)方法,设\(f_{i,0/1}\)表示......
  • qsort的模拟实现与思路
    这是一篇介绍qsort函数模拟实现的博客,包含每一步实现的思路,对MSDN中qsort的使用进行了详细介绍。在实现的过程中,也对涉及到的知识点进行了一些简单介绍。希望可以给同为计......
  • 项目实战总结《模拟gin写一个web框架gee》
    概述:gee框架使用了前缀树算法来匹配路由,实现了路由分组,继承了gin的上下文写法,封装了常用的jsion,html,string,实现了服务端渲染,用钩子函数实现了中间件。项目的难度偏入门......
  • UVA-210 并行程序模拟 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​注意:每次unlock后,只需要拿出一个在阻塞队列里面的程序放到等待队列的头部。因为......
  • UVA-822 客户中心模拟 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码这个题目的做法可能并不唯一,对于某些场景有不同的答案也能过。我的思路:是......
  • RT-Thread 模拟器 simulator 搭建 LVGL 的开发调试环境
    前言RT-Thread当前的版本:4.1.0,通过简单的配置就可以支持最新的LVGL图形库版本,LVGL图形库以软件包的方式加入工程LVGL可以认为是当前开源、免费的优秀GUI的图形库,对内存的......
  • 天梯赛练习题L2-041 插松枝(模拟/贪心)
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582268930473984L2-041插松枝题目意思:人造松枝加工场的工人需要将各种尺寸的塑料松针插到松......
  • 天梯赛练习题L2-042 老板的作息表(模拟)
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582383141380096题目大意:给定n个工作的时间段,每个时间段都在00:00:00到23:59:59这个范围内......
  • 省选模拟赛 3.4
    A注意到\(a[i]\)可以异或上任意多次\(a[1\toi-1]\),于是求出\(1\toi-1\)的线性基\(V\),能变成数的个数是\(2^{|V|}\)。评测记录//Sparkle#include<bits......