/*** 函数防抖(目标时间段内,目标函数只执行最后一次)* @param {*} func 目标函数* @param {*} wait 目标时间段* @param {*} immediate 是否立即执行一次* @returns*/function useDebounce(func, wait, immediate) {let timer;return function() {let context = this;let args = arguments;if (timer) clearTimeout(timer);if (immediate) {var callNow = !timer;timer = setTimeout(() => {timer = null;}, wait);if (callNow) func.apply(context, args);} else {timer = setTimeout(function() {func.apply(context, args);}, wait);}};}
/*** 事件区分处理(左键、右键、双击)* 解决与鼠标拖拽冲突* @param {*} 支持左键、右键、双击事件* @returns 清理函数*/function useEvents(dom, { leftClick, rightClick, dblClick }) {let dblclick = false;let prevPageX = 0;let prevPageY = 0;function handle(event) {if (event.type === 'mousedown') {prevPageX = event.pageX;prevPageY = event.pageY;return;} else if (event.type === 'dblclick') {dblclick = true;setTimeout(() => (dblclick = false), 300);dblClick && dblClick(event);} else {if (prevPageX !== event.pageX || prevPageY !== event.pageY) {return;}if (event.button === 2) {rightClick && rightClick(event);} else {if (dblclick) return;leftClick && leftClick(event);}}}const _handle = useDebounce(handle, 300, false); //函数防抖,消除高频率操作下的重复事件dom.addEventListener('dblclick', handle, false);dom.addEventListener('mousedown', handle, false);dom.addEventListener('mouseup', _handle, false);return () => {dom.removeEventListener('dblclick', handle, false);dom.removeEventListener('mousedown', handle, false);dom.removeEventListener('mouseup', _handle, false);};}

javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化相关推荐

  1. html 左键右键双击事件,dblclick()

    dblclick() 为JavaScript 的"dblclick"事件绑定一个处理函数,或者触发元素上的"dblclick"事件..dblclick(hand ...

  2. html 左键右键双击事件,html中在鼠标双击元素时触发的事件属性ondblclick

    实例Copy Text 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 ondblclick 属性. 定义和用法 ondblclick 属性在鼠标双击元 ...

  3. 【Fungus笔记】No.3:与 Sprite(精灵) 交互,Click(点击) or Drag(拖拽)

    当Block(段落)的响应事件为Sprite类时,可以通过跟Sprite(精灵)的交互来执行指令. 交互行为包括拖拽和点击两种. 首先是 Object Clicked(点击). 设置为点击事件后,它要 ...

  4. pc 端与移动端区分点击与拖拽事件

    pc 端与移动端区分点击与拖拽事件 PC 端 移动端 在 html 的应用中,拖拽事件为 mousedown -> mousemove -> mouseup 三个事件组成,在一个有拖拽事件 ...

  5. JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.阻止事件冒泡和默认行为 二.拖拽 1, 实现拖拽相关的三大事件: 2, 实现拖拽思路: 1, 给目标元素添加onmous ...

  6. JavaScript中的拖拽事件且限制出界

    JavaScript中的拖拽事件限制出界 JavaScript事件中很多都会用到拖拽,而在现实中很多拖拽是会限制在浏览器界面禁止出界的,下面是封装好的限制出界的拖拽事件. function drag( ...

  7. android 9.0 10.0 上报鼠标左键右键给app调用

    在进行TV定制化开发时,客户需要系统上报鼠标左键右键给app做处理 也就是 KEYCODE_META_LEFT 和 KEYCODE_META_RIGHT这两个事件 首选需要在 KeyEvent.jav ...

  8. JavaScript学习第十六天(键盘事件、表单事件、拖拽事件、框架事件、媒体事件)

    文章目录 键盘事件 表单事件 剪贴板事件 拖拽事件 打印事件 框架事件 媒体事件 总结 键盘事件 onkeydown 键盘按下事件,当有按键按下时触发 onkeyup 键盘松开事件,当有按键被松开时触 ...

  9. 511遇见易语言大漠模块制作鼠标左键右键单击双击

    本机视频封装的命令是大漠键鼠中的以下命令:LeftClick().LeftDoubleClick().LeftDown().LeftUp().MiddleClick().MiddleDown().Mi ...

最新文章

  1. service数据保存_「数据架构」数据流程图与实例-客户服务系统
  2. 1D target tensor expected, multi-target not supported
  3. 有没有插件_这 10 款插件让你的 GitHub 更好用、更有趣
  4. opencv4.2.0 视频去抖动算法代码
  5. CF1368G Shifting Dominoes(扫描线求矩阵的并集)
  6. 服务器怎么存储文件节省空间,超大空间云服务器文件存储
  7. 壁纸网站的高清图片,完美符合视觉控的你!
  8. 【ZOJ 4053】【青岛网络赛主席树+启发式合并】
  9. 使用PHP,求算100-999以内的水仙花数--详细
  10. 文件对比软件 Beyond Compare 4 破解
  11. social network 学习心得
  12. 3、MybatisPlus
  13. 千年古刹南普陀寺义工十年发展已逾6000人
  14. 微信小程序开发的适合领域
  15. Dell戴尔笔记本电脑灵越Inspiron 14 5420原装出厂WIN11系统恢复原厂OEM专用系统
  16. 桌面窗口管理器占用内存过高解决办法
  17. android简易记账,简单记账(便捷快速记账)
  18. 北斗导航 | 北斗/GNSS精密定位:从PPP-RTK 到 Vision-PPP(第十一届中国卫星导航年会报告)
  19. 机器视觉的相机标定到底是什么?
  20. SAAS产品有哪些优缺点?

热门文章

  1. 安卓手机通过USB连接路由器有线上网
  2. 关于“未使用GUID分区表”无法安装的解决方案
  3. 【vue开发基础】之使用阿里巴巴矢量图标库
  4. 【英文】Node.js Streams: Everything you need to know //转载
  5. 【C++】【整活】鼠标抖动
  6. 手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常....)
  7. 【Calcite】Apache Calcite 框架初探及概念详解
  8. 猫小胖服务器位置,最终幻想14新增猫小胖大区拆分陆行鸟大区-最终幻想14国服大区调整计划公布!-Appfound...
  9. 【转】现学现用WPS,小技巧大帮助
  10. APP下载量全面概述,含统计方法