事件的侦听和删除 判断浏览器的类型 特别是判断ie的类型 来 使用addEventListener & attachEvent

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button id="bn0">按钮</button>
    <script>
        /* 1、侦听事件函数不能带入任何参数
        2、侦听事件函数有且仅仅有一个参数e 就是事件接收到
        事件对象 其他函数没有
        3、事件函数不能写return 返回值 但是可以使用return跳出 */

        // var num = 0;
        // var bn = document.querySelector("button")
        // bn.addEventListener('click', clickHandler1);
        // bn.addEventListener('click', clickHandler2);
        // bn.addEventListener('mousemove', clickHandler2);

        // function clickHandler1(e) {
        //     num++
        //     console.log(num,"aaa"  )
        //     if( num >1 ){
        //         // e.currentTarget.removeEventListener('click',clickHandler1)
        //         this.removeEventListener('click',clickHandler1)
        //     }
        // }

        // function clickHandler2(e) {
        //     // console.log('bbb')
        //     console.log( e.type )// 事件类型
        // }
        /* 
        当元素的事件不再使用时 必须删除 否则会造成内存堆积 侦听事件都会存储在
        堆中
        
        当元素被删除了 也必须删除改元素的所有事件
        
        attachEvent 是ie使用的注册事件的方法 是ie的私有方法
        */

        var bn0 = document.getElementById('bn0')
        // on( bn0,"click",clickHandler)

        // function clickHandler(e){
        //     console.log( e.type )c
        // }

        try {
            bn0.addEventListener('click', clickHandler);
            console.log(111)
        } catch (e) {
            bn0.attachEvent('onclick', clickHandler)
            console.log(222)
        }

        function clickHandler(e) {
            console.log(e.type)
        }


        // function on(){

        // }


        function on(target, type, handler) {
            var b = judgeBrowser("IE");
            if (b && Number(b) < 9) {
                target.attachEvent("on" + type, handler);
            } else {
                target.addEventListener(type, handler);
            }
        }

        //    用于判断浏览的类型是否符合 返回 浏览器版本号和false
        function judgeBrowser(browser) {
            var arr = getBrowserRV();
            if (browser.toLowerCase() === arr[0].toLowerCase()) {
                return arr[1];
            } else {
                return false;
            }
        }
        console.log(judgeBrowser("IE"))

        // 用于获取浏览器的类型
        //  返回一个数组 浏览器和版本号
        function getBrowserRV() {
            var str = navigator.userAgent;
            if (str.indexOf("Chrome") > -1) {
                var index = str.indexOf("Chrome");
                return str.slice(index, str.indexOf(" ", index + 1)).split("/");
            }
            if (str.indexOf("Firefox") > -1) {
                var index = str.indexOf("Firefox");
                return str.slice(index).split("/");
            }
            if (str.indexOf("rv:") > -1 && str.indexOf("Trident") > -1) {
                return ["IE", "11"];
            }
            if (str.indexOf("Trident") > -1) {
                var index = str.indexOf("MSIE");
                return ["IE", str.slice(index, str.indexOf(";", index)).split(" ")[1]];
            }
        }

        console.log(getBrowserRV())

    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值