• JS学习之事件流


    事件流
    1、在事件触发时,会先执行一个阶段‘捕获阶段’ ,从最外层向触发该事件元素寻找的一个过程。最终找到触发该事件的元素,如果该元素有绑定事件处理函数则执行该函数
    2、在找到触发该事件的元素之后,如果该元素身上有事件就会执行,成为‘目标阶段’。
    3、接下来执行‘冒泡阶段’,从目标元素的上一层往外找,直到最外层时结束整个时间流程
    注意:不论是捕获阶段还是冒泡阶段,在寻找目标元素的过程和向外返回的过程中,所遇到每一个元素身上如果有相同的事件处理函数都被会调用
    低版本IE浏览器事件只能绑定在冒泡阶段。

     1 <!DOCTYPE html>
     2 <html lang="en" id='html'>
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>函数的学习</title>
     7     <style>
     8         #div{
     9             200px;
    10             height: 200px;
    11             background: green;
    12             font-size: 50px;
    13         }
    14         #span{
    15             display: inline-block;
    16              50px;
    17             height: 50px;
    18             background: red;
    19             font-size:20px;
    20             line-height: 50px;
    21             color:#fff;
    22         }
    23     </style>
    24     
    29 </head>
    30 
    31 <body id='body'>
    32     <div id="div">
    33         div
    34         <span id="span">
    35             span
    36         </span>
    37     </div>
    38     <script>
    39         var div=document.getElementById("div");
    40         var span=document.getElementById("span");
    41         var body=document.getElementById("body");
    42         var html=document.getElementById("html");
    43         window.id="window1";
    44         function fn(){
    45             console.log(this.id);
    46         }
    47         //用on的方法给元素添加事件先触发事件源对象,然后再往外执行(冒泡阶段)
    48         window.onclick=fn;  //window1
    49         html.onclick=fn;    //html  window1
    50         body.onclick=fn;   //body  html window1
    51         div.onclick=fn;      //div   body html   window1
    52         span.onclick=fn;   //span  div  body   html   window1   
    53       
    54     </script>
    55 </body>
    56 
    57 </html>
    1 //用addEventListener 添加事件,最后一个参数为false代表冒泡阶段,与on添加的事件是一样的
    2         window.addEventListener('click',fn,false);
    3         html.addEventListener('click',fn,false);
    4         body.addEventListener('click',fn,false);
    5         div.addEventListener('click',fn,false);
    6         span.addEventListener('click',fn,false); //span  div  body   html   window1 
    1       // 表示事件会在捕获的阶段执行,从最外面先执行再到事件源目标
    2         window.addEventListener('click',fn,true);
    3         html.addEventListener('click',fn,true);
    4         body.addEventListener('click',fn,);true
    5         div.addEventListener('click',fn,true);
    6         span.addEventListener('click',fn,true); // window1 html body div span

    注意:目标元素事件的执行顺序是按照目标元素的事件书写顺序执行的,就是谁写前面先执行谁

     1         span.addEventListener('click',function(){
     2             console.log("捕获");
     3         },true);
     4         span.addEventListener('click',function(){
     5             console.log("冒泡");
     6         },false);
    // span元素上同时绑了2个事件,控制台输出的答案是 捕获 冒泡,按照书写顺序来
    1     span.addEventListener('click',function(){
    2             console.log("冒泡");
    3         },false)
    4      span.addEventListener('click',function(){
    5             console.log("捕获");
    6         },true);
    7       // 输出的答案是  冒泡  捕获 ,按照书写顺序来

    阻止浏览器的默认行为

    浏览器的默认行为
    非JS添加,自身会有的一些功能

    阻止浏览器的默认行为
    需要知道这些默认行为什么时候发生
    1、on 添加的事件在函数里写一句 return false
    2、addEventlistener 添加的事件
    在函数里调用event 身上的preventDefault()

    3 当点击鼠标右键会有一个下拉菜单  这些都是浏览器的默认行为

     1  <body id='body'>
     2           <a href="www.baidu.com">百度</a> <br/><br/><br/><br/>
     3           <img src="1.jpg" alt=""/>
     4     <script>
     5     
     6         var a=document.querySelector("a");
     7         var img=document.querySelector("img");
     8       
     9         //阻止a的跳转
    10         a.onclick=function(){
    11                        return false;
    12         }
    13         //阻止图片的默认拖拽
    14         img.addEventListener("mousedown",function(e){
    15              e.preventDefault();
    16         });
    17         //ondragstart 是h5中的阻止拖拽
    18         img.ondragstart=function(){
    19                 return  false;
    20         }
    21         // 阻止右键菜单
    22         document.oncontextmenu=function(){
    23             return false;
    24         }
    25     </script>
  • 相关阅读:
    IE下CSS属性float:right下换行问题解决方法
    php 中简单输出 csv和excel
    VMware 链接网络的三种模式及自己的安装方法
    ajax的应用
    php中ADODB的用法
    关于web 标准的常见问题 总结
    javascript 闭包
    php strrev 中文字符串翻转乱码的问题
    注册表 一览
    SVN Commit报错 svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted
  • 原文地址:https://www.cnblogs.com/xubj/p/9878570.html
Copyright © 2020-2023  润新知