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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
JavaScript 解析读取XML文档 实例代码
Jul 07 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
Mar 12 Javascript
基于JQuery实现异步刷新的代码(转载)
Mar 29 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
前端构建工具之gulp的配置与搭建详解
Jun 12 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
javascript获取指定区间范围随机数的方法
Sep 08 Javascript
angular4模块中给标签添加背景图的实现方法
Sep 15 Javascript
webpack打包js的方法
Mar 12 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
Jan 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
大学生暑期实践感言
2014/02/26 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
个人业务学习心得体会
2016/01/25 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS