事件冒泡和事件委托的共鸣与相互利用
来源:互联网 发布:it行业发展方向 编辑:程序博客网 时间:2024/06/15 21:55
事件冒泡(Bubble):所谓的冒泡指的就是事件的向上传导,当后代元素上的事件被触发时,其祖先元素的相同事件也会被触发
在大量的开发过程中大部分的情况冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象来取消冒泡
代码示范区:
var s1 = document.getElementById("s1");
s1.onclick = function(event){
event = event || window.event;
alert("我是span的单击响应函数");
//取消冒泡
//可以将事件对象的cancelBubble设置为true,即可取消冒泡
event.cancelBubble = true;
};
//为box1绑定一个单击响应函数
var box1 = document.getElementById("box1");
box1.onclick = function(event){
event = event || window.event;
alert("我是div的单击响应函数");
event.cancelBubble = true;
};
//为body绑定一个单击响应函数
document.body.onclick = function(){
alert("我是body的单击响应函数");
};
};
接下来这个代码是个人对冒泡事件的应用所写的一个实例:(仅供参考:)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box1{
width: 100px;
height: 100px;
background-color: red;
/*
* 开启box1的绝对定位
*/
position: absolute;
}
</style>
<script type="text/javascript">
window.onload = function(){
/*
* 使div可以跟随鼠标移动
*/
//获取box1
var box1 = document.getElementById("box1");
//绑定鼠标移动事件
document.onmousemove = function(event){
//解决兼容问题
event = event || window.event;
//获取滚动条滚动的距离
/*
* chrome认为浏览器的滚动条是body的,可以通过body.scrollTop来获取
* 火狐等浏览器认为浏览器的滚动条是html的,
*/
var st = document.body.scrollTop || document.documentElement.scrollTop;
var sl = document.body.scrollLeft || document.documentElement.scrollLeft;
//var st = document.documentElement.scrollTop;
//获取到鼠标的坐标
/*
* clientX和clientY
* 用于获取鼠标在当前的可见窗口的坐标
* div的偏移量,是相对于整个页面的
*
* pageX和pageY可以获取鼠标相对于当前页面的坐标
* 但是这个两个属性在IE8中不支持,所以如果需要兼容IE8,则不要使用
*/
var left = event.clientX;
var top = event.clientY;
//设置div的偏移量
box1.style.left = left + sl + "px";
box1.style.top = top + st + "px";
};
var box2 = document.getElementById("box2");
box2.onmousemove = function(event){
event = event || window.event;
event.cancelBubble = true;
};
};
</script>
</head>
<body style="height: 1000px;width: 2000px;">
<div id="box2" style="width: 500px; height: 500px; background-color: #bfa;"></div>
<div id="box1"></div>
</body>
</html>
事件的委托:
1.指将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素
从而通过祖先元素的响应函数来处理事件
2.事件委托是利用了事件冒泡的性质,通过委托可以减少事件绑定的次数,提高程序的性能.
代码示范区:(这是本人为了更好的理解事件委托和事件冒泡是什么意思的实例)---------->仅供参考:
<script type="text/javascript">
window.onload = function(){
var u1 = document.getElementById("u1");
//点击按钮以后添加超链接
var btn01 = document.getElementById("btn01");
btn01.onclick = function(){
//创建一个li
var li = document.createElement("li");
li.innerHTML = "<a href='javascript:;' class='link'>新建的超链接</a>";
//将li添加到ul中
u1.appendChild(li);
};
/*
* 为每一个超链接都绑定一个单击响应函数
* 这里我们为每一个超链接都绑定了一个单击响应函数,这种操作比较麻烦,
* 而且这些操作只能为已有的超链接设置事件,而新添加的超链接必须重新绑定
*/
//获取所有的a
var allA = document.getElementsByTagName("a");
//遍历
/*for(var i=0 ; i<allA.length ; i++){
allA[i].onclick = function(){
alert("我是a的单击响应函数!!!");
};
}*/
/*
* 我们希望,只绑定一次事件,即可应用到多个的元素上,即使元素是后添加的
* 我们可以尝试将其绑定给元素的共同的祖先元素
*
* 事件的委派
* - 指将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素
* 从而通过祖先元素的响应函数来处理事件。
* - 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能
*/
//为ul绑定一个单击响应函数
u1.onclick = function(event){
event = event || window.event;
/*
* target
* - event中的target表示的触发事件的对象
*/
//alert(event.target);
//如果触发事件的对象是我们期望的元素,则执行否则不执行
if(event.target.className == "link"){
alert("我是ul的单击响应函数");//在event.target.className中还存在一个隐患这样处理并不是最好的
}
};
};
</script>
</head>
<body>
<button id="btn01">添加超链接</button>
<ul id="u1" style="background-color: #bfa;">
<li>
<p>我是p元素</p>
</li>
<li><a href="javascript:;" class="link">超链接一</a></li>
<li><a href="javascript:;" class="link">超链接二</a></li>
<li><a href="javascript:;" class="link">超链接三</a></li>
</ul>
</body>
- 事件冒泡和事件委托的共鸣与相互利用
- 事件冒泡与事件委托
- jquery的事件委托小结利用与避免事件的冒泡
- 事件委托、事件触发与事件冒泡
- 事件冒泡、事件捕获与事件委托
- js 事件的冒泡和委托
- 事件委托与阻止冒泡
- js事件冒泡和委托
- 事件冒泡与捕获&事件委托
- 面试题-冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件
- JavaScript事件冒泡和事件委托
- js事件冒泡和事件委托
- 浅谈事件冒泡和事件捕获的应用场景——事件代理/事件委托
- 浅谈事件委托(事件代理)和事件冒泡
- 阻止事件冒泡和围绕.on()方法 [.selector]事件委托中冒泡情况的探讨
- Jquery事件、冒泡、委托与节点
- javascript事件委托(冒泡)
- 委托与事件的联系和区别
- OPENGL学习笔记之六
- 编译hadoop2.6.0-cdh5.7.0 native支持snappy & 编译中遇到的坑及解决办法
- shell变量的子串的截取/删除/替换
- docker对.netcore的部署
- H5项目常见问题汇总及解决方案
- 事件冒泡和事件委托的共鸣与相互利用
- debug....
- Java代码复制文件【图片、文档等】
- 疯狂讲义随笔——坐标变换模拟雪花飘落
- 数据在内存中所占的字节数或位数
- html5中audio的详细使用
- Charles的安装与使用说明
- Android日期时间戳比较大小
- php Rc4对接java过程中遇见的坑