事件捕获和事件冒泡(二)

事件冒泡

当一个元素接受到事件的时候,会把它接收到的所有事件传播给它的父级,一直到顶层window,叫事件冒泡机制;

例子:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>事件冒泡</title>
    <style>
        div{padding:40px;}
       #div1{
           background: red;
       }
       #div2{
           background:green;
       }
        #div3{background: blue;}
    </style>
    <script>
        window.onload=function(){
            var oDiv1=document.getElementById(‘div1‘);
            var oDiv2=document.getElementById(‘div2‘);
            var oDiv3=document.getElementById(‘div3‘);

            function fn1(){
                alert(this.id);
            }

            //事件函数绑定
            oDiv1.onclick=fn1;//告诉div1,如果它接收到了一个点击事件,那它就去执行fn1
            oDiv2.onclick=fn1;
            oDiv3.onclick=fn1;//div3,div1 事件冒泡
        }
    </script>
</head>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>
</body>
</html>
<iframe
  style="width: 100%; height: 300px"
  src=" https://jsfiddle.net/v2yjremt/embedded/result,js,html,css/">
</iframe>

阻止冒泡:在当前要阻止冒泡的事件函数中调用event.cancelBubble=true;

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>阻止冒泡</title>
    <style>
        #div1{
            width:100px;
            height:200px;
            border:1px solid red;
            display: none;
        }
    </style>
    <script>
        window.onload=function(){
            var oBtn=document.getElementById(‘btn1‘);
            var oDiv=document.getElementById(‘div1‘);

            oBtn.onclick=function(ev){
                var oEvent=ev||event;
                //阻止当前事件函数事件冒泡
                oEvent.cancelBubble=true;
                oDiv.style.display=‘block‘;
            }
            document.onclick=function(){
               /* setTimeout(function(){//观察事件冒泡:div出现一秒钟后隐藏了
                    oDiv.style.display=‘none‘;
                },1000);*/
                oDiv.style.display=‘none‘;
            }
        }
    </script>
</head>
<body>
<input type="button" value="按钮" id="btn1">
<div id="div1">点击按钮div就出现,点击除按钮以外的部分div就消失</div>
</body>
</html>
<iframe
  style="width: 100%; height: 300px"
  src=" https://jsfiddle.net/7f5qgLm3/embedded/result,js,html,css/">
</iframe>

对比没有取消冒泡事件时的效果,下面用了延时器一遍观察效果

<iframe
  style="width: 100%; height: 300px"
  src=" https://jsfiddle.net/7f5qgLm3/1/embedded/result,js,html,css/">
</iframe>

事件冒泡的运用

下面是一个网站中常见的功能——分享到

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>事件冒泡</title>
    <style>
        #div1{
            width:100px;
            height:200px;
            background: red;
            position: absolute;
            left:-100px;
            top:100px;
        }
        #div2{
            width:30px;
            height:60px;
            position: absolute;
            right:-30px;
            top:70px;
            background:#000000;
            color:#ffffff;
            text-align: center;
        }
    </style>
    <script>
        window.onload=function(){
            var oDiv=document.getElementById(‘div1‘);
            oDiv.onmouseover=function(){
                this.style.left=0+‘px‘;//鼠标移动到div2时,div2接收到over、out事件时它自己不做,传播给父级div1执行
            }
            oDiv.onmouseout=function(){
                this.style.left=-100+‘px‘;
            }
        }
    </script>
</head>
<body>
<div id="div1">
    <div id="div2">分享到</div>
</div>
</body>
</html>

效果:

<iframe
  style="width: 100%; height: 300px"
  src=" https://jsfiddle.net/aLurk1p1/embedded/result,js,html,css/">
</iframe>
时间: 2024-10-11 01:20:07

事件捕获和事件冒泡(二)的相关文章

js事件捕获,事件冒泡,事件委托以及DOM事件流

一:DOM事件流: 事件流是从页面接收事件的顺序,DOM2级事件规定事件流包括三个阶段: ①事件捕获阶段:用意在于事件达到目标之前捕获它,在事件捕获阶段事件流模型:document→html→body→div ②处于目标阶段2:实际的目标到事件 ③事件冒泡阶段:由最具体的元素接收到事件,然后向上传播到较为不具体的节点.事件流模型:div →body→ html→ document 二:事件委托 事件委托顾名思义:将事件委托给另外的元素.其实就是利用DOM的事件冒泡原理,将事件绑定到目标元素的父节

javascript中的事件冒泡、事件捕获和事件执行顺序

谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响.这两种事件流分别是捕获和冒泡.和许多Web技术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选择实现了捕获事件流,微软则实现了冒泡事件流.幸运的是,W3C决定组合使用这两种方法,并且大多数新浏览器都遵循这两种事件流方式. 1事件传播--冒泡与捕

javascript的事件捕获和事件冒泡

W3C规范对于脚本事件有两种处理方式,第一种为冒泡模型,第二种是事件捕获模型,前者为早期浏览器所支持的(也称DOM 0标准),后者为W3C规范推荐的方法(也称DMO 2标准). 其主要区别: @1:事件捕获不依赖于特定的事件来处理属性 @2:你可以对任何对象的任何一种事件注册多个事件句柄函数 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> &

JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,

javascript -- 事件捕获,事件冒泡

使用js的时候,当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,单击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获. 为什么会有事件冒泡,又有捕获呢?应为当初IE浏览器和Natscape浏览器分别对自己浏览器的事件采用了不同的发生机制,IE浏览器采用了冒泡型:定义有相同事件的嵌套元素,当事件被触发时,子元素拥有优先权,即从里向外发生,像水里的泡泡一样从里向外冒.而Netscape采用了相反的做法,即捕获型,父元素拥有优先权

DOM事件阶段以及事件捕获与事件冒泡先后执行顺序

平时浏览这么多技术文章,如过不去实践.深入弄透它,这个技术点很快就会在脑海里模糊.要加深印象,就得好好过一遍.重要的事情说三遍,重要的知识写一遍. 开发过程中我们都希望使用别人成熟的框架,因为站在巨人的肩膀上会使得我们开发的效率大幅度提升.不过,我们也应该.必须了解其基本原理.比如DOM事件,jquery框架帮我们为我们封装和抽象了各浏览器的差异行为,为事件处理带来了极大的便利.不过浏览器逐步走向统一和标准化,我们可以更加安全地使用官方规范的接口.因为只有获得众多开发者的芳心,浏览器才会走得更远

事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,重写onlick会覆盖之前属性,没有兼容性问题 ele.onclik = null; //解绑单击事件,将onlic

DOM事件机制(事件捕获和事件冒泡和事件委托)

内容: 1.事件复习 2.事件冒泡与事件捕获 3.事件委托 1.事件复习 (1)事件 事件是用来处理响应的一个机制,这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器 下面的链接描述了所有事件:https://developer.mozilla.org/en-US/docs/Web/Events (2)事件绑定 事件绑定有3种方法,前两钟方法在这里不介绍,主要看第三种: addEventListener方法(使用事件监听绑定事件) addEventListener: 1 e

事件捕获和事件冒泡理解

之前总是单纯的记得事件冒泡和事件捕获相反,一个从下至上,另一个从上至下,但是却没有弄明白他们的执行顺序,导致昨晚笔试CVTE出了类似这么一道题不会做. 对于DOM和DOM2级事件这两个区别就不详细解释了,网上大把资料. 这里仅针对该题目进行事件捕获和事件冒泡顺序进行理解. 首先要明白DOM2级事件规定的事件流包含3个阶段,事件捕获阶段.处于目标阶段.事件冒泡阶段. 下面贴题目代码(仅核心部分)进行详细解释,首先 addEventListener方法有三个参数,分别是事件监听类型,事件执行函数和是

关于事件捕获和事件冒泡

这篇随笔主要是写关于事件冒泡和事件捕获的一些关联,主要是从<JavaScript高级程序设计>这本书第13章总结扩展而来,今天主要是想扩展对书本里面P358页以及加深一下理解. 一.先说一下定义: 事件冒泡阶段:从最具体的元素,即目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象(所有浏览器都支持). 事件捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象(DOM2级事件要求时间从document对象开始传播,但是IE9,Safari,Chrome,Opera