zoukankan      html  css  js  c++  java
  • js事件监听

    /*
    事件监听器

    addEventListener()
    removeEventListener()

    传统事件绑定:
    1、重复添加会,后添加的后覆盖前面的。
    */

    示例代码中的html结构:

    <body>    
        <button id = "btn1">按钮</button>
    </body>

    //代码示

                window.onload = function(){
                    //传统事件绑定
                    var oBtn = document.getElementById('btn1');
                    oBtn.onclick = function(){
                        alert('hello world');
                    }
    
                    //此处省略100行代码
                    
                    oBtn.onclick = function(){
                        alert('world hello');
                    }
                }

    /*上面的结果是下面的oBtn.onclick事件会覆盖到上面的oBtn.onclick事件
    最后页面上输出的结果也是 world hello;*/

    //怎么才能让他两个事件都存在呢?这里我们要用到事件监听器
    //addEventListener()
    //removeEventListener()
    /*
    事件监听器

    addEventListener()
    格式:
    node.addEventListener(事件类型, 函数_要执行的匿名函数, false)
    第三参数:false 事件冒泡 true 事件捕获


    removeEventListener()
    格式:
    node.removeEventListener(事件类型, 函数名);

    传统事件绑定:
    1、重复添加会,后添加的后覆盖前面的。
    */


    //代码示例:

            
                window.onload = function(){
                    //事件监听绑定
                    var oBtn = document.getElementById('btn1');
                    oBtn.addEventListener ('click', function(){
                        alert('hello world');                    
                    }, false)
                    
    
                    //此处省略100行代码
                    //再添加一个监听事件用来监听click 点击
                    oBtn.addEventListener ('click', function(){
                        alert('world hello');
                        
                    }, false)
                }        

     


    //这样就不会发生重叠现象,点击按钮时会 弹出 hello world 和 world hello;

    //我再来看一下移除事件监听 removeEventListener,首先先看一下传统的移除事件

    //我们修改html结构如下

    <body>    
        <button>添加事件</button>
        <button>按钮</button>
        <button>删除事件</button>
    </body>

    //具体演示代码如下

                window.onload = function(){
                    //获取3个button按钮元素节点
                    var aBtns = document.getElementsByTagName('button');
                    //给第二个按钮添加一个传统的点击事件
                    aBtns[1].onclick = function(){
                        alert('原有的事件');
                    }
                    //当点击第一个按钮的时候再给第二个按钮添加一个传统的点击事件
                    aBtns[0].onclick = function(){
                        aBtns[1].onclick = show;
                    }
                    //点击第三个按钮的时候,将第二按钮点击事件赋值成 null  即为空
                    aBtns[2].onclick = function(){
                        aBtns[1].onclick = null;
                    }
                    
                    //方便演示的函数
                    function show(){
                        alert('hello world');
                    }                
                                
                    
                }        

     

    //在演示过程中,我们可以看出每次都是相互覆盖的关系,刚开始的时候 点击第二个按钮 会弹出 原有的事件, 我们再去点一下 第一个按钮 后
    //再回来点 第二个按钮 这时的内容 就变成了 hello world 说明第二次添加的事件 把原有的事件就覆盖了,点击 第三个按钮 也是同样的道理
    //所在 再次点击 第二个时 就什么也不弹出来。


    //我们再来看一下移除事件监听 removeEventListener与上面的区别,

    //代码如下

                window.onload = function(){
                    var aBtns = document.getElementsByTagName('button');
    
                    aBtns[1].addEventListener('click', function(){
                        alert('原有的事件');
                    }, false);
    
                    aBtns[0].onclick = function(){
                        aBtns[1].addEventListener('click', show, false);
                    }
    
                    aBtns[2].onclick = function(){
                        aBtns[1].removeEventListener("click", show);
                    }
                }
    
                function show(){
                    alert('hello world');
                }

    //可以看出用事件监听的方法可以不覆盖原有的事件,还能自由可控制,移除添加的事件。

    /*但是这种方法 是ie9 以后才出来的,所以ie9以前不兼容,但是他给我们了两个功能一样的函数,

    IE下
    attachEvent()
    格式
    只有两个参数
    attachEvent(on事件类型, 函数_要执行的匿名函数或函数)
    detachEvent(on事件类型, 函数_要取消的匿名函数或函数)*/


    /*所以我们封装兼容所有浏览器的 监听事件方法(函数)*/

            /*---------封装兼容所有浏览器的 监听事件方法(函数--------------*/
                //封装添加监听事件的函数 
                //    形参说明
                //    obj  是要添加的元素节点对象   
                //    event 是事件类型(是click还是mousedown等)
                // func  是事件触发后要执行的函数
                function addEvent(obj, eventType, func){
                    if(obj.addEventListener){
                        obj.addEventListener(eventType, func, false);
                    }else{
                        obj.attachEvent("on" + eventType, func);
                    }
                }
                //封装移除监听事件的函数
                function removeEvent(obj, eventType, func){
                    if(obj.removeEventListener){
                        obj.removeEventListener(eventType, func);
                    }else{
                        obj.detachEvent("on" + eventType, func);
                    }
                }        
            
            /*---------封装兼容所有浏览器的 监听事件方法(函数)end--------------*/        

    /*总结
    传统事件绑定可以满足我们对于事件绑定的大部分需求。

    事件监听器可以补充我们传统事件绑定不能满足的更高的要求。

    */

  • 相关阅读:
    java数据类型
    如何判断数组
    git 常用命令
    如何配置 ESLint 工作流
    Lambda表达式和函数式接口
    面向对象(多态与内部类)
    面向对象(封装与继承)
    面相对像(基础)
    break;怎么跳出外部循环
    面向对象(类与对象)
  • 原文地址:https://www.cnblogs.com/taohuaya/p/9601964.html
Copyright © 2011-2022 走看看