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 相关文章推荐
$()JS小技巧
Jul 21 Javascript
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
理解jQuery stop()方法
Nov 21 Javascript
Javascript中typeof 用法小结
May 12 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
Bootstrap CSS组件之输入框组
Dec 17 Javascript
利用纯js + transition动画实现移动端web轮播图详解
Sep 10 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 Javascript
Vue+webpack+Element 兼容问题总结(小结)
Aug 16 Javascript
Javascript操作select控件代码实例
Feb 14 Javascript
利用node.js开发cli的完整步骤
Dec 29 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
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
php实现递归的三种基本方式
2020/07/04 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
urllib2自定义opener详解
2014/02/07 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python3 读写文件换行符的方法
2018/04/09 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
python实现TCP文件传输
2020/03/20 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
如何写自我鉴定
2014/03/19 职场文书
英语教师自荐信
2014/05/26 职场文书
汽车广告策划方案
2014/05/31 职场文书
食品安全处置方案
2014/06/14 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
教师自查自纠材料
2014/10/14 职场文书
学期个人工作总结
2015/02/13 职场文书
高一地理教学工作总结
2015/08/12 职场文书
公开致歉信
2019/06/24 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
python+opencv实现视频抽帧示例代码
2021/06/11 Python