javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化
/*** 函数防抖(目标时间段内,目标函数只执行最后一次)* @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区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化相关推荐
- html 左键右键双击事件,dblclick()
dblclick() 为JavaScript 的"dblclick"事件绑定一个处理函数,或者触发元素上的"dblclick"事件..dblclick(hand ...
- html 左键右键双击事件,html中在鼠标双击元素时触发的事件属性ondblclick
实例Copy Text 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 ondblclick 属性. 定义和用法 ondblclick 属性在鼠标双击元 ...
- 【Fungus笔记】No.3:与 Sprite(精灵) 交互,Click(点击) or Drag(拖拽)
当Block(段落)的响应事件为Sprite类时,可以通过跟Sprite(精灵)的交互来执行指令. 交互行为包括拖拽和点击两种. 首先是 Object Clicked(点击). 设置为点击事件后,它要 ...
- pc 端与移动端区分点击与拖拽事件
pc 端与移动端区分点击与拖拽事件 PC 端 移动端 在 html 的应用中,拖拽事件为 mousedown -> mousemove -> mouseup 三个事件组成,在一个有拖拽事件 ...
- JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.阻止事件冒泡和默认行为 二.拖拽 1, 实现拖拽相关的三大事件: 2, 实现拖拽思路: 1, 给目标元素添加onmous ...
- JavaScript中的拖拽事件且限制出界
JavaScript中的拖拽事件限制出界 JavaScript事件中很多都会用到拖拽,而在现实中很多拖拽是会限制在浏览器界面禁止出界的,下面是封装好的限制出界的拖拽事件. function drag( ...
- android 9.0 10.0 上报鼠标左键右键给app调用
在进行TV定制化开发时,客户需要系统上报鼠标左键右键给app做处理 也就是 KEYCODE_META_LEFT 和 KEYCODE_META_RIGHT这两个事件 首选需要在 KeyEvent.jav ...
- JavaScript学习第十六天(键盘事件、表单事件、拖拽事件、框架事件、媒体事件)
文章目录 键盘事件 表单事件 剪贴板事件 拖拽事件 打印事件 框架事件 媒体事件 总结 键盘事件 onkeydown 键盘按下事件,当有按键按下时触发 onkeyup 键盘松开事件,当有按键被松开时触 ...
- 511遇见易语言大漠模块制作鼠标左键右键单击双击
本机视频封装的命令是大漠键鼠中的以下命令:LeftClick().LeftDoubleClick().LeftDown().LeftUp().MiddleClick().MiddleDown().Mi ...
最新文章
- service数据保存_「数据架构」数据流程图与实例-客户服务系统
- 1D target tensor expected, multi-target not supported
- 有没有插件_这 10 款插件让你的 GitHub 更好用、更有趣
- opencv4.2.0 视频去抖动算法代码
- CF1368G Shifting Dominoes(扫描线求矩阵的并集)
- 服务器怎么存储文件节省空间,超大空间云服务器文件存储
- 壁纸网站的高清图片,完美符合视觉控的你!
- 【ZOJ 4053】【青岛网络赛主席树+启发式合并】
- 使用PHP,求算100-999以内的水仙花数--详细
- 文件对比软件 Beyond Compare 4 破解
- social network 学习心得
- 3、MybatisPlus
- 千年古刹南普陀寺义工十年发展已逾6000人
- 微信小程序开发的适合领域
- Dell戴尔笔记本电脑灵越Inspiron 14 5420原装出厂WIN11系统恢复原厂OEM专用系统
- 桌面窗口管理器占用内存过高解决办法
- android简易记账,简单记账(便捷快速记账)
- 北斗导航 | 北斗/GNSS精密定位:从PPP-RTK 到 Vision-PPP(第十一届中国卫星导航年会报告)
- 机器视觉的相机标定到底是什么?
- SAAS产品有哪些优缺点?
热门文章
- 安卓手机通过USB连接路由器有线上网
- 关于“未使用GUID分区表”无法安装的解决方案
- 【vue开发基础】之使用阿里巴巴矢量图标库
- 【英文】Node.js Streams: Everything you need to know //转载
- 【C++】【整活】鼠标抖动
- 手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常....)
- 【Calcite】Apache Calcite 框架初探及概念详解
- 猫小胖服务器位置,最终幻想14新增猫小胖大区拆分陆行鸟大区-最终幻想14国服大区调整计划公布!-Appfound...
- 【转】现学现用WPS,小技巧大帮助
- APP下载量全面概述,含统计方法