前端JS基础八(事件)

事件

  • 通用事件绑定
  var btn=document.getElementById(‘btn1’); 
  btn.addEventListener(‘click’,function(event){   //JS事件绑定
    console.log(‘clicked’) 
  })

   //由于addEventListener太长了 我们自己写一个事件绑定函数
  function bindEvent(elem,type,fn){  
    elem.addEventListener(type,fn) 
  }

  var a=document.getElementById(‘link1’) 
  bindEvent(a,’click’,function(e){  //事件绑定函数的使用
    e.preventDefault()  //阻止默认行为 
    alert(‘clicked’) 
  })

注:关于IE低版本的兼容性 
IE低版本使用attachEvent绑定事件,和W3C标准不一样

事件冒泡

在父级 div 中定义的事件,会在子级的事件执行之后冒泡上来执行

  • 阻止事件冒泡 e.stopPropagation()
  <!DOCTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
      <title></title>
    </head>
    <body>
      <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>
  
      <script type="text/javascript">
      利用阻止冒泡的机制实现:只点击 p1 的时候弹窗激活
        function bindEvent(elem,type,func) {
          elem.addEventListener(type,func)
        }
        var p1 = document.getElementById('p1')
        bindEvent(p1,'click',function(e){
          e.stopPropagation()
          alert('激活')
        })
        bindEvent(body,'click',function (e) {
          alert('取消')
        })
      </script>
    </body>
  </html>
  • 代理
  <!DOCTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
      <title></title>
    </head>
    <body>
      <div id="div1">
        <p id="p1">激活</p>
        <p id="p2">取消</p>
      </div>
      <div id="div2">
        <p id="p3">取消</p>
        <p id="p4">取消</p>
      </div>
  
      <script type="text/javascript">
      写一个带有代理功能的事件监听函数
      function bindEvent(elem,type,selector,fn){
        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) //将fn里的this替换为target
            }        
          }else{
            //不是代理
            fn(e)
          }
        })
      }

      var div1 = document.getElementById('div1')
      bindEvent(div1,'click','a',function(e){
        e.preventDefault()
        console.log(this.innerHTML)
      })

      var p1 = document.getElementById('p1')
      bindEvent(p1,'click',function(e){
        console.log(p1.innerHTML)
      })
      </script>
    </body>
  </html>

练习题

练习题1、编写一个通用的事件监听函数 
  看上面的bindEvent函数

练习题2、描述事件冒泡流程 
  1、DOM树形结构 
  2、事件冒泡 
  3、阻止冒泡 
  4、冒泡的应用(代理) 

练习题3、对于一个无线下拉加载图片的页面,如何给每个图片绑定事件 
  1、使用代理 
  2、知道代理的两个优点 
    (1)代码简洁 
    (2)减少浏览器内存占用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,266评论 1 45
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,895评论 1 11
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,222评论 0 8
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 5,057评论 0 6
  • 清风徐来的天台
    秦愤H阅读 1,837评论 2 2

友情链接更多精彩内容