• 事件委托


    事件委托在js高级程序设计中的事件章节被提到。内容参考了红书高级程序设计,写下来供自己和大家参考。

    对“事件处理程序过多的”的解决方案就是事件委托。事件委托 利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

    因为在js中,添加到页面的事件处理程序的数量将会关系到页面的整体运行性能。导致这个问题的原因是多方面的,1:函数是对象,对象占据内存,内存中的对象越多性能越差;2:必须事先指定的所有事件处理程序会导致dom的访问次数,会延续整个页面的交互就绪时间。这样利用事件委托可以提升性能。

    下面例子

    <div id="mylinks">
        <div id="goSomewhere">go somewhere</div>
        <div id="doSomething">do something</div>
        <div id="sayhi">sayHi</div>
    </div>

    //点击3个列表,执行三个操作,以往做法:

           var item1 = document.getElementById("goSomewhere");
           var item2 = document.getElementById("doSomething");
           var item3 = document.getElementById("sayHi");
           EventUtil.addHandeler(item1,"click",function(event) {
               location.href = "www.baidu.com";
           });
           EventUtil.addHandeler(item2,"click",function(event) {
               document.title = " i changed title";
           });
           EventUtil.addHandeler(item3,"click",function(event){
               alert("hi");
           });

    //利用事件委托,只需要在dom树中尽量在最高的层次上添加一个事件处理程序,如下:

           var list = document.getElementById("mylinks");
           EventUtil.addHandeler(list,"click",function(event) {
               event = EventUtil.getEvent(event);
               var target = EventUtil.getTarget(event);
               switch(target.id){
                   case "goSomewhere":
                   location.href = "www.baidu.com";
                   break;
                   case "doSomething":
                   document.title = "i changes title";
                   break;
                   case "sayHi":
                   alert("hi");
                   default:
                   console.log("error");
               }
           })

    因为所有列表都是这个元素ur:id ="myLinks"的子元素,而且他们的事件冒泡,最终单击元素会冒泡到这个这个函数处理事件。这样与以往做法相比,这段代码的消耗会变低,因为只取了一个dom元素,只添加了一个事件处理程序,这样占据的内存会更少。

    所有用到按钮的事件(多数鼠标事件和键盘事件)都适合采用事件委托技术。

    采用事件委托的优点:

    1.document对象很快就访问到,而且可以在页面生命周期的任何时间点为它添加事件处理程序。换句话说,只要单击的元素呈现在页面上,就可以立即具备适当的功能。

    2.在页面上设置事件处理程序所需的时间更少。只需要添加一个事件处理程序所需的dom引用更少,所花时间也少。

    3.整个页面占用的内存空间更少,能够提升整体性能。

    最适合采用事件委托的事件包括:

    click,mousedown,mouseup,keyup,keydown,keypress.

  • 相关阅读:
    HDFS架构原理
    Hadoop集群搭建
    解决8080端口号占用问题
    基于SSM的Maven项目(Redis和Mysql)配置文件整合
    maven 集成SSM项目配置文件模版
    初识Spring笔记
    初识Mybatis一些总结
    将对数据库的增删改查封装为方法
    10分钟安装Elasticsearch
    ThreadLocal详解
  • 原文地址:https://www.cnblogs.com/wangwenhui/p/7659069.html
Copyright © 2020-2023  润新知