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 相关文章推荐
为Extjs加加速(javascript加速)
Aug 19 Javascript
JavaScript中json对象和string对象之间相互转化
Dec 26 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
js省市联动效果完整实例代码
Dec 09 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
基于Vue实现拖拽功能
Jul 29 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
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
JSON在PHP中的应用介绍
2012/09/08 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
php session_decode函数用法讲解
2019/05/26 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python机器学习实战之树回归详解
2017/12/20 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python count函数使用方法实例解析
2020/03/23 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
成人教育自我鉴定
2013/11/01 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
《问银河》教学反思
2014/02/19 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL