美文网首页
前端JS基础八(事件)

前端JS基础八(事件)

作者: EmilioWeng | 来源:发表于2018-08-03 22:23 被阅读0次

事件

  • 通用事件绑定
  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)减少浏览器内存占用

相关文章

  • 前端JS基础八(事件)

    事件 通用事件绑定 事件冒泡 在父级 div 中定义的事件,会在子级的事件执行之后冒泡上来执行 阻止事件冒泡 e....

  • day3 前端JavaScript(交互)(2022-02-23

    JavaScript 基础语法 动态脚本语言:负责前端界面交互 前端事件是设置以on开头的标记中的属性 执行的js...

  • 前端相关大杂烩

    前端基础面试题(JS部分) 前端基础面试题(JS部分)学习 React.js 比你想象的要简单 原文地址:Lear...

  • [夯实前端基础]--js事件详解

    遇到js事件的问题思考,回去补当初自己的总结文,受益匪浅,感谢当初的自己?原文地址 javaScript 与 HT...

  • 【前端】Vue.js 基础篇(下)

    【前端】Vue.js 基础篇(下)

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • Web开发快速入门基础篇(4)前端基础之JS

    4.前端基础之JS 简述 掌握了解JavaScript(js)的基本使用,以及jquery常用操作,能够处理前端交...

  • 技术文章地址

    Web前端开发CSS、JS 廖雪峰的JS教程 JQuery基础 前端工程师必备的PS技能—切图篇 前端入门方法 A...

  • 初识JavaScript

    什么是JS JavaScript,简称JS,是前端的默认脚本语言。JS是一门基于事件原型面向对象的编程语言,前端三...

  • js事件函数问题

    事件标签内引入js函数分号(;)使用问题 问题描述:在复习到前端的js部分时,看到事件句柄调用事件处理函数时,有的...

网友评论

      本文标题:前端JS基础八(事件)

      本文链接:https://www.haomeiwen.com/subject/tfouvftx.html