JS中mouseup事件丢失的原因与解决办法


Posted in Javascript onJune 14, 2017

前言

当实现类似Excel选中区域的功能时,经常出现 mouseup 事件丢失的情况,由于缺少了 mouseup 事件,导致一个完整的操作无法进行。

如果你是想进行拖拽移动操作,也可以参考本文。

原因

目前发现两个原因:

  • 触发了浏览器的 drag 操作,导致mouseup丢失。
  • 由于鼠标离开了操作的区域,触发了mouseleave导致mouseup丢失。

解决办法

第一种情况

通过执行下面的代码阻止系统默认的操作来防止触发 drag 操作:

//在事件中
e=e || window.event;
pauseEvent(e);

//阻止事件冒泡
//不仅仅要stopPropagation,还要preventDefault
function pauseEvent(e){
 if(e.stopPropagation) e.stopPropagation();
 if(e.preventDefault) e.preventDefault();
 e.cancelBubble=true;
 e.returnValue=false;
 return false;
}

通过对事件调用pauseEvent方法可以防止出现drag操作,因此在区域内可以避免mouseup丢失。即使你想实现的本来就是 drag 操作,也可以通过创建跟随鼠标移动的dom元素实现效果。

第二种情况

由于鼠标移到了区域外,触发了 mouseleave 操作,因此在这种情况下要监听 mouseleave 操作,当触发该操作时可以停止或者还原状态。

特别注意的地方

当处理鼠标事件时,可以还要考虑是否要控制按下那个键时才允许操作。

Mouse事件中有一个 buttons 属性,该值标示鼠标按下了一个或者多个按键,如果按下的键为多个,值则为多个:

      0 : 没有按键或者是没有初始化

      1 : 鼠标左键

      2 : 鼠标右键

      4 : 鼠标滚轮或者是中键

      8 : 第四按键 (通常是“浏览器后退”按键)

      16 : 第五按键 (通常是“浏览器前进”)

多个值的时候,相当于进行|操作,即鼠标左右键同时按下时1|2=3。判断是否按下左键可以用value&1!=0进行,例如左右键同时按下时3&1!=0是true,说明按下了左键。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
理解Javascript_08_函数对象
Oct 15 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
jQuery中:last选择器用法实例
Dec 30 Javascript
jquery隔行换色效果实现方法
Jan 15 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
javaScript封装的各种写法
Aug 14 Javascript
JS删除数组指定值常用方法详解
Jun 04 Javascript
Vue2.0 从零开始_环境搭建操作步骤
Jun 14 #Javascript
jQuery.form.js的使用详解
Jun 14 #jQuery
ExtJs异步无法向外传值和赋值的完美解决办法
Jun 14 #Javascript
详解Vue爬坑之vuex初识
Jun 14 #Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 #Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 #Javascript
vue时间格式化实例代码
Jun 13 #Javascript
You might like
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
PHP6新特性分析
2016/03/03 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
DWZ刷新dialog解决方法
2013/03/03 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
js 作用域和变量详解
2017/02/16 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python读写Excel文件的实例
2013/11/01 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python金融数据可视化汇总
2017/11/17 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
应届生法律求职信
2013/10/22 职场文书
水利水电专业自荐信
2014/07/08 职场文书
学校财务管理制度
2015/08/04 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
python字符串的多行输出的实例详解
2021/06/08 Python
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python