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 相关文章推荐
javascript 面向对象继承
Nov 26 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
Apr 11 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
Aug 04 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
微信小程序从注册账号到上架(图文详解)
Jul 17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 Javascript
JavaScript数组 几个常用方法总结
Nov 11 Javascript
5个实用的JavaScript新特性
Jun 16 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
PHP安全配置详细说明
2011/09/26 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
python实现根据月份和日期得到星座的方法
2015/03/27 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
Python socket聊天脚本代码实例
2020/01/02 Python
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
优秀班集体先进事迹材料
2014/05/28 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
2014年施工员工作总结
2014/11/18 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
TypeScript 内置高级类型编程示例
2022/09/23 Javascript