zoukankan      html  css  js  c++  java
  • js事件处理的3种方式的分析

    web前端包含3个技术:html、css、js。 html和css的结合是通过style、class、id以及html标签。而js是通过事件来切入html和css的。而浏览器的时间处理有3种方式:

    方式一:html事件处理

    直接将事件函数写在html标签里面如下,如果click事件函数复杂的话直接把函数写在外部onclick直接调用函数名

    <input type="button" id="btn" name="btn" onclick="alert('click me!')"/>
    <input type="button" id="btn" name="btn" onclick="btnClick"/>
    function btnClick(){
      alert("click me!");
    }

    方式二:DOM0级事件处理

    DOM0级事件处理的规则是:每个DOM元素都有自己的事件处理属性,该属性可以赋值一个函数。DOM元素在js代码里面就是一个js对象,所以事件是被赋值的也因此事件可以被覆盖甚至被设为null。

    var btnDOM = document.getElementById("btn");
    btnDOM.onclick = function(){
        alert("click me!");  
    }
    btnDOM.onclick = null;//点击事件即被取消
    btnDOM.onclick = function(){//此函数会将覆盖第一个函数
       alert("click me ---!");
    }

    方式三:DOM2事件处理和IE事件处理

    事件流:从页面接收事件的顺序

    事件冒泡和事件捕获:两种解决事件流问题的方案

    微软结合事件冒泡设计了一个事件系统即IE事件处理方式:

    var btnDOM = document.getElementById("btn");
    btnDOM.attachEvent("onclick",function(){
             alert("Click Me!");
    });
    //在js的匿名函数里,两个匿名函数哪怕代码完全一样,js都会在内部使用不同变量存储
    var ftn = function(){
             alert("Click Me,too!");
    };
    btnDOM.attachEvent("onclick",ftn);
    btnDOM.detachEvent("onclick",ftn);

    DOM2事件处理,每次事件触发时都会把所有元素遍历两遍,IE只有冒泡所以IE是需要遍历一次。

    //DOM2事件处理里添加事件使用的是addEventListener,它接收三个参数比ie事件处理多一个,前两个的意思和ie事件处理方法的两个参数一样,唯一的区别就是第一个参数里要去掉on这个前缀,第三个参数是个布尔值,如果它的取值是true,那么事件就按照捕获方式处理,取值为false,事件就是按照冒泡处理
    
    var btnDOM = document.getElementById("btn");
    btnDOM.addEventListener("click",function(){
             alert("Click Me!");
    },false);
    
    var ftn = function(){
             alert("Click Me,too!");
    };
    
    btnDOM.addEventListener("click",ftn,true);
    btnDOM.addEventListener("click",ftn,false);
    btnDOM.removeEventListener("click",ftn,false);

    事件代理:减少遍历次数和内存消耗

    高效的时间添加方式,给目前页面不存在的dom添加事件

    使用父级的事件代理,事件流循环遍历的次数少了

  • 相关阅读:
    洛谷P1948 [USACO08JAN]电话线Telephone Lines
    bzoj4152 [AMPPZ2014]The Captain
    洛谷P1396 营救
    洛谷P1821 [USACO07FEB]银牛派对Silver Cow Party
    洛谷P2002 消息扩散
    Uoj308【UNR #2】UOJ拯救计划
    洛谷P1937 [USACO10MAR]仓配置Barn Allocation
    洛谷P3740 [HAOI2014]贴海报
    洛谷P2344 奶牛抗议
    Android(java)学习笔记124:利用Service在后台播放背景音乐
  • 原文地址:https://www.cnblogs.com/lindsayzhao103011/p/4126217.html
Copyright © 2011-2022 走看看