zoukankan      html  css  js  c++  java
  • 事件捕获与事件冒泡优先级

    【前言】

          DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响。这两种事件流分别是捕获和冒泡。和许多Web技术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们,下面介绍DOM事件阶段以及事件捕获与事件冒泡先后执行顺序

    【主体】

    要做好兼容,除了依赖框架,我们得理解其基本原理。

    DOM事件三个阶段

    当一个DOM事件被触发时,它不仅仅只是单纯地在本身对象上触发一次,而是会经历三个不同的阶段:

    1.捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;

    2.目标阶段:到达目标事件位置(事发地),触发事件;

    3.冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。

     

    事件捕获与事件冒泡先后执行顺序就显而易见了。

    <!DOCTYPE html>
     <html lang="en">
     <head>
       <meta charset="UTF-">
       <title>Document</title>
       <style>
         #outer{
           text-align: center;
            px;
           height: px;
           background-color: #ccc;
           margin: auto;
         }
         #middle{
            px;
           height: px;
           background-color: #f;
           margin: auto;
         }
         #inner{
            px;
           height: px;
           background-color: #f;
           margin: auto;
           border-rad
         }
       </style>
     </head>
     <body>
       <div id='outer'>
         <span>outer</span>
         <div id='middle'>
           <span>middle</span>
           <div id='inner'>
             <span>inner</span>
           </div>
         </div>
       </div>
       <script>
         function $(element){
           return document.getElementById(element);
         }
         function on(element,event_name,handler,use_capture){
           if(addEventListener){
             $(element).addEventListener(event_name,handler,use_capture);
           }
           else{
             $(element).attachEvent('on'+event_name,handler);
           }
         }
         on("outer","click",o_click_c,true);
         on("middle","click",m_click_c,true);
         on("inner","click",i_click_c,true);
         on("outer","click",o_click_b,false);
         on("middle","click",m_click_b,false);
         on("inner","click",i_click_b,false);
         function o_click_c(){
           console.log("outer_捕获");
           alert("outer_捕获");
         }
         function m_click_c(){
           console.log("middle_捕获")
           alert("middle_捕获");
         }
         function i_click_c(){
           console.log("inner_捕获")
           alert("inner_捕获");
         }
         function o_click_b(){
           console.log("outer_冒泡")
           alert("outer_冒泡");
         }
         function m_click_b(){
           console.log("middle_冒泡")
           alert("middle_冒泡");
         }
         function i_click_b(){
           console.log("inner_冒泡")
           alert("inner_冒泡");
         }
       </script>
     </body>
     </html>

    .

  • 相关阅读:
    Maven3路程(五)用Maven创建Hibernate项目
    Eclipse中通过Hibernate Tools插件实现从数据库逆向生成Hibernate带注解的实体类
    Maven3路程(三)用Maven创建第一个web项目(1)
    jquery下载所有版本(实时更新)
    Oracle读取Blob数据-通过hibernate
    使用以下代码可以插入BLOB类型的图片或pdf文档到Oracle数据库中:
    Intellij IDEA系列 --GIT的初步使用
    java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案
    idea如何安装使用jetty runner
    IntelliJ IDEA下SVN的配置及使用说明
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/11104086.html
Copyright © 2011-2022 走看看