zoukankan      html  css  js  c++  java
  • JavaScript基础知识——事件

    QA:

      1、编写一个通用的事件监听函数

       //elem:要绑定元素的父元素; type:事件类型; selector:本来要绑定的元素
       function bindEvent(elem,type,selector,fn) {
       //如果第四个参数没有,那么第三个参数应该是一个函数,fn 就赋值成 selector
          if(fn == null){
            fn = selector
            selector = null
          }
          elem.addEventListener(type,function(e) {
            var target
            if(selector) {
              // 代理
              target = e.target
              if(target.matches(selector)) { //判断目标节点是否和选择器匹配
                fn.call(target,e)
              }
            }else{
              // 不使用代理
              fn(e)
            }
          })
        }
    
        //使用代理
        var div1 = document.getElementById('div1')
        bindEvent(div1,'click','a',function(e) {
          e.preventDefault()
          console.log(this.href);
        })
    
        //不使用代理
        var btn1 = document.getElementById('btn1')
        bindEvent(btn1,'click',function(e) {
          console.log(btn1.innerHTML);
        })

      2、描述事件冒泡的过程

      3、对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

    知识点:

      1、通用事件绑定

    //标准方法
     var btn = document.getElementById('btn1');
     btn.addEventListener('click', function(e) {
        console.log('checked')
     })
    //封装事件绑定
     function blindEvent(elem, type, fn) {
         elem.addEventListener(type, fn)
     }
     var a = document.getElementById('aLink')
     blindEvent(a, 'click', function(e) {
         e.preventDefault() //阻止默认行为
         alert('checked')
     })

      注意:IE绑定事件用attachEvent

      2、事件冒泡

    <div id="div1">
            <p id="p1">激活</p>
            <p id="p2">取消</p>
            <p id="p3">取消</p>
            <p id="p4">取消</p>
        </div>
        <div id="div2">
            <p id="p5">取消</p>
            <p id="p6">取消</p>
        </div>
    //根据以上代码,点击每一个p标签,弹出里面的响应的内容
    //封装的绑定事件
        function blindEvent(elem, type, fn) {
            elem.addEventListener(type, fn)
        }
        //开始
        var p1 = document.getElementById('p1');
        blindEvent(p1, 'click', function(e) {
            e.stopPropagation(); //阻止冒泡到上层;如果不阻止的话,会先弹出'激活',再弹出'取消',因为在body上也绑定了事件
            alert('激活')
        })
    
        var body = document.body;
        blindEvent(body, 'click', function(e) {
            alert('取消')
        })

      事件代理(事件冒泡的具体应用)

        使用场景: 多个元素上绑定相同的事件
        原理: 利用冒泡机制
        操作:把事件绑定在要绑定元素的父元素上面

      

    <div id="div1">
         <a href="#">a1</a>
         <a href="#">a2</a>
         <a href="#">a3</a>
         <a href="#">a4</a>
    <!-- 会随时新增更多的 a 标签 --> 
    </div>
    
    //实现
       var div1 = document.getElementById('div1');
        div1.addEventListener('click', function(e) {
            var target = e.target; 
         // e.target能告诉你点击(事件)是从哪儿触发的
         //例如在div1 上绑定了一个点击事件,在 a1 上点击,这个时候 target 是a1,而不是 div1
            if (target.nodeName === 'A') {
                alert(target.innerHTML)
            }
        })
  • 相关阅读:
    Win7 安装
    线上java排查
    spring boot
    redisson
    Jcaptca 图片
    URL重写
    gradle导出依赖的jar包
    Redis tomcat
    flex 通过htmlservices链接moss的rest(rest 的get post方式)
    java语言MySQL批处理
  • 原文地址:https://www.cnblogs.com/utrustme/p/8573590.html
Copyright © 2011-2022 走看看