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脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
JS request函数 用来获取url参数
May 17 Javascript
jQuery中width()方法用法实例
Dec 24 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
Javascript中的arguments对象
Jun 20 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
微信小程序新增的拖动组件movable-view使用教程
May 20 Javascript
JavaScript选择排序算法原理与实现方法示例
Aug 06 Javascript
微信小程序dom操作的替代思路实例分析
Dec 06 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 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在线代理转向代码
2012/05/05 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
python实现socket端口重定向示例
2014/02/10 Python
python使用range函数计算一组数和的方法
2015/05/07 Python
浅析Python基础-流程控制
2016/03/18 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Python xlwt模块使用代码实例
2020/06/10 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
2019年c语言经典面试题目
2016/08/17 面试题
新闻编辑求职信
2014/04/09 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
语文复习计划
2015/01/19 职场文书
民事代理词范文
2015/05/25 职场文书
工作感言一句话
2015/08/01 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android