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 for循环从入门到偏门(效率优化+奇特用法)
Aug 01 Javascript
按下回车键指向下一个位置的一个函数代码
Mar 10 Javascript
javascript里使用php代码实例
Dec 13 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
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进行MySQL删除记录操作代码
2008/06/07 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
浅析Python中return和finally共同挖的坑
2017/08/18 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python 实现两个线程交替执行
2020/05/02 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
nohup的用法
2012/11/26 面试题
顶岗实习计划书
2014/01/10 职场文书
四年级下册教学反思
2014/02/01 职场文书
绿色小区申报材料
2014/08/22 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
个人政治思想总结
2015/03/05 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Python中22个万用公式的小结
2021/07/21 Python