高效js代码-事件委托

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>js事件委托</title>
</head>

<style>
    #con{
        width:200px;
        height:200px;
        background: orange;
    }
    #outer{
        position: relative;
        top: 50px;
        left: 50px;
        width:100px;
        height:100px;
        background: #eeddff;
    }
    #inner{
        position: relative;
        top: 251px;
        left: 25px;
        width:50px;
        height:50px;
        background: #44ddff;
    }
</style>
<body>


<ul id="ul">
    <li class="item" id="add">add</li>
    <li class="item" id="del">del</li>
    <li class="item" id="move">move</li>
</ul>



</body>
</html>

 

 

<script>
// DOM事件流
// DOM2级事件规定事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。
// DOM2级事件定义了两个方法addEventListener()和removeEventListener()
// IE不同的它有自己的方法attachEvent()和detachEvent

    // 事件冒泡
    // ie事件流叫事件冒泡
    // 第三个参数设置为false -事件冒泡阶段触发事件

    // 事件捕获
    // ie事件流叫事件冒泡
    // 第三个参数设置为false -事件冒泡阶段触发事件
    // Netscape(网景)浏览器是一个网络信息浏览器,也是开发其公司,门户网站的名称。
    // 事件捕获
    // 第三个参数设置为true -事件捕获阶段触发事件

var  eventUtils = {
    // addEventHandler:function(){}
    addEventHandler: function(el,event,fnHandler){
        // console.log('test');
        if(el.addEventListener){
            console.log(el.addEventListener);
            el.addEventListener(event,fnHandler,false)
        }
            else{
                console.log(el.attachEvent);
                el.attachEvent('on'+event,fnHandler)}
    },
    removeEventHandler: function(el,event,fnHandler){
        // console.log('test');
        if(el.removeEventListener){
            // console.log(el.removeEventListener);
            el.removeEventListener(event,fnHandler,false)
        }
            else{
                // console.log(el.detachEvent);
                el.detachEvent('on'+event,fnHandler)}
    }
}

</script>

<script>
    // 事件委托
    // 事件委托是通过事件冒泡原理实现的一个高效率js编码
    // 原理:减少js操作dom 实现浏览器性能提升
    window.onload = function(){
        // alert();
        var ul = document.getElementById('ul');
        // var lis
        //         = document.getElementById('li'); 

        // 点击事件委托
        eventUtils.addEventHandler(ul,'click',function(e){
            console.log(e);
            var ev =(e)?e:window.event;
            var target = ev.target || ev.srcElement;
            console.log(target.id);
        });

        // 移入变红,移出变白
        var moveHover = {
            mouseover:function(){
                eventUtils.addEventHandler(ul,'mouseover',function(e){
                // console.log(e);
                var ev =(e)?e:window.event;
                var target = ev.target || ev.srcElement;
                // console.log(target.id);
                if(target.nodeName.toLowerCase() == 'li'){
                    target.style.background ='red';
                }

                });
            },
            mouseout:function(){
                eventUtils.addEventHandler(ul,'mouseout',function(e){
                // console.log(e);
                var ev =(e)?e:window.event;
                var target = ev.target || ev.srcElement;
                // console.log(target.id);
                if(target.nodeName.toLowerCase() == 'li'){
                    target.style.background ='#fff';
                }

                });
            }
        };
        moveHover.mouseover();
        moveHover.mouseout();
        


    };

    



</script>

 

posted @ 2017-09-05 20:51  alan-alan  阅读(362)  评论(0编辑  收藏  举报