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实现随机返回数组的一个元素
Aug 13 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
jQuery.fn和jQuery.prototype区别介绍
Oct 05 Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
JavaScript学习笔记之创建对象
Mar 25 Javascript
最细致的vue.js基础语法 值得收藏!
Nov 03 Javascript
JavaScript实现的CRC32函数示例
Nov 23 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
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 分页分组类
2009/12/10 PHP
用php解析html的实现代码
2011/08/08 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
js Calender控件使用详解
2015/01/05 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
python实现多进程代码示例
2018/10/31 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python 实现端口扫描工具
2020/12/18 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
《长相思》听课反思
2014/04/10 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
综合测评自我评价
2015/03/06 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
生产车间管理制度
2015/08/04 职场文书
初级职称评定工作总结
2015/08/13 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs