HTML中setCapture、releaseCapture 使用方法浅析


Posted in Javascript onSeptember 25, 2016

1. setCapture 简介

setCapture可以将鼠标事件锁定在指定的元素上,当元素捕获了鼠标事件后,该事件只能作用在当前元素上。

以下情况会导致事件锁定失败:

  • 当窗口失去焦点时,锁定的事件,自动就会取消。
  • alert也会导致事件的锁定取消。解决办法是在alert之后再次锁定。
  • 鼠标右键也会导致事件解锁。

setCapture只可以作用于以下事件:

  • onclick
  • ondblclick
  • onmousedown
  • onmouseup
  • onmouseover
  • onmouseout

 setCapture不可作用于键盘等其它事件,只能作用于鼠标事件。主要用于: onmouseover  与  onmouseout 事件。

* setCapture该法是IE浏览器专有。

2. setCapture 使用格式

setCapture 有一个布尔值参数,用于设置是否捕获其子元素的鼠标事件。

  • 当参数是ture时 ,当前元素会捕获其内的所有子元素的鼠标事件,即指定元素内的子元素不会触发鼠标事件,也就是当前元素内的子元素与当前元素外的元素一致。

  • 当参数为false时,当前元素不会捕获该其内的所有子元素的鼠标事件。容器内的对象能够正常地触发事件和取消冒泡。

示例: currElement.setCapture(boolean)

3. setCapture - Simple - Demo

<script>
 var oBox = document.getElementById('infor'),
  oBtn = document.getElementsByTagName('button')[0];

 oBtn.onmousedown=function(){
  this.setCapture(true);
 }
 oBtn.onmouseover = function(){
 oBox.innerHTML+='onmouseover | ';
 }
 oBtn.onmouseout = function(){
 oBox.innerHTML+='onmouseout | ';
 }
 oBtn.onmouseup = function(){
 oBox.innerHTML+='onmouseup | ';
 }

</script>

4. setCapture 总结

setCapture()用于事件的锁定,对应的还有一个解锁事件方法 releaseCapture()方法,releaseCapture()可以为指定的元素解除事件锁定。它们俩必须成对使用。

setCapture()方法主要用于高级的拖动技术,这是因为在IE下,当我们在要拖动的元素上,在按下鼠标按钮然后拖动时,当拖动过快,或者是超出浏览器的文档窗口时,拖动对象身上的onmousedown就会失效。在Chrome我们可以为doucment绑定onmouseout来判断是否发生这样的情况,但是IE下面却行不通,所以最好的解决办法就时为要拖动的元素对象锁定鼠标事件,在拖动后在解除事件锁定。

具体使用案例:https://3water.com/article/93446.htm

另外在Firefox中有相似的功能,它们分别是:

· captureEvents(Event.eventType)
· releaseEvents(Event.eventType)

最后在学习的过程中我对setCapture还存在的几个疑问,希望以后能得到高手的指点:

1. 为什么为button元素锁定事件后,没有在button元素上移动,但是还会触发onmouseover与onmouseout事件。

[ 具体代码见上面的DEMO ]

2.在onclick事件中,没法永久将鼠标事件锁定在指定元素上。

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>setCapture - Simple - Demo</title>
 </head>
 <body>
  <button>click</button>
 </body>
</html>
 <script>
 var oBtn = document.getElementsByTagName('button')[0];
 oBtn.onclick=function(){
  this.setCapture();
 }
 </script>

然后第二次点击页面后就会发现锁定自动取消。

Javascript 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
javascript 子窗体父窗体相互传值方法
May 31 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
JavaScript检测实例属性, 原型属性
Feb 04 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
Jan 16 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
页面内锚点定位及跳转方法总结(推荐)
Apr 24 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 Javascript
jQuery的deferred对象使用详解
Sep 25 #Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 #Javascript
D3.js实现直方图的方法详解
Sep 25 #Javascript
关于JS中二维数组的声明方法
Sep 24 #Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 #Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
Sep 24 #Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
Sep 24 #Javascript
You might like
PHP5函数小全(分享)
2013/06/06 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
利用python代码写的12306订票代码
2015/12/20 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python常用算法学习基础教程
2017/04/13 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
Linux的主要特性
2014/10/06 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
大学生村官事迹材料
2014/01/21 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
银行求职自荐信
2014/06/30 职场文书
完整版商业计划书
2014/09/15 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs