事件委托

页面上事件过多,影响页面的整体运行性能。因为,首先每个函数都是对象,都会占用内存;内存中的对象越多,性能就越差。其次必须事先指定所有事件处理程序,导致DOM访问次数变多,会延迟整个页面的交互就绪时间。

对事件过多的问题的解决方案就是事件委托。事件委托利用冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click事件会一直冒泡到document层次。我们可以为整个页面指定一个onclick事件处理程序,而不必为每个单击的元素分别添加事件处理程序。以下例子

<ul id="naiUl">
     <li id="naili0">夏目贵志</li>
     <li id="naili1">云雀恭弥</li>
     <li id="naili2">杀生丸</li>
</ul>

按照传统做法,添加三个事件处理程序:

var heart1= document.getElementById("naili0");
     EventUtil.addHandler(heart1,"click",function(event){
         alert("夏目友人帐")
     })
     var heart1= document.getElementById("naili1");
     EventUtil.addHandler(heart1,"click",function(event){
         console.log("家庭教师")
     })
     var heart1= document.getElementById("naili2");
     EventUtil.addHandler(heart1,"click",function(event){
        local.href="穿越时空的爱恋"
     })

使用事件委托,只需在DOM树中尽量最高层次上添加一个事件处理程序:

var list =document.getElementById("naiUl");
     EventUtil.addHandler(list,"click",function(event){
        event= EventUtil.getEvent(event);
        var target = EventUtil.getTarget(event);
        switch(target.id){
            case "naili0":
                alert("夏目友人帐");
                break;
            case "naili1":
                console.log("家庭教师");
                break;
            case "naili2":
                local.href="穿越时空的爱恋";
                break;
        }
     })

在上面例子中,用事件委托只为ul元素添加了一个onclick事件处理程序。由于所有列表项都是这个元素的子节点,而且他们的事件会冒泡,所以单击事件最终会被这个函数处理。例子中,事件目标是被单击的列表项,故而可以通过检测id属性进行对应的操作。

最合适采用事件委托技术的事件包括click、mousedown、mouseup、 keydown、keyup、keypress。虽然mouseover和mouseout事件也冒泡,但要适当处理他们并不容易,二七人经常需要计算元素位置。(因为鼠标从一个元素移到其子节点后者鼠标移出该元素时,都会触发moseout事件。)


vue中事件委托

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值