事件

作者: 泡杯感冒灵 | 来源:发表于2020-07-21 17:32 被阅读0次

题目

  1. 编写一个通用的事件监听函数
// 绑定事件的兼容代码
function bindEvent(elem, type, fn) {
  if (elem.addEventListener) {
    // addEventListener 的第三个参数 可选,布尔值,指定事件是在捕获阶段还是在冒泡阶段执行
    // 默认是false,在冒泡阶段实行
    elem.addEventListener(type,fn,false)
  } else if (elem.attachEvent) {
    elem.attachEvent("on"+type,fn)
  } else {
    elem["on"+type] = fn
  }
}

//解绑事件的兼容代码
function removeEvent(elem, type, fn) {
  if (elem.removeEventListener) {
    elem.removeEventListener(type,fn,false)
  } else if (elem.detachEvent) {
    elem.detachEvent("on"+type,fn)
  } else {
    elem["on"+type] = null
  }
}
  1. 描述事件冒泡的流程
  2. 无限下拉的图片列表,如何监听每个图片的点击?
// 使用事件代理
// 用event.target来获取触发元素
// 用matches来判断是否是触发元素
比如  event.target.matches(selector)  //判断当前目标元素是否匹配selector这个选择器,匹配返回true,否则返回false

知识点

  • 事件绑定(响应某个事件的函数就叫事件处理程序或事件侦听器)
//四种方式
// 直接在元素上绑定回调函数 (HTML事件处理程序)
 <button id="btn" onclick="clickBtn()">click me</button>

// JS获取baiDOM元素对象后,对onclick属性赋值,绑定事件:(DOM0级事件处理程序)
document.getElementById('btn').onclick=clickBtn;

//JS获取DOM对象后,调用对象的addEventListener函数绑定事件:(DOM2级事件处理程序)
document.getElementById('btn').addEventListener('click',clickBtn);

// IE事件处理程序  attachEvent 与 addEventListener一样,也可以用来为一个元素添加多个事件处理程序,
// 但是执行顺序是相反的,addEventListener添加的是按照添加顺序执行的,而attachEvent 是按照添加的相反顺序执行的
const btn = document.getElementById('myBtn')
btn.attachEvent('onclick', function(){
    console.log('clicked')
})

// 注意
// 在IE中使用attachEvent  与 使用 DOM0级方法的主要区别在于事件处理程序的作用域。
// 在使用DOM0级方法的情况下,事件处理程序会在其所属元素的作用域内运行;
// 在使用attachEvent()方法的情况下,事件处理程序会在全局作用域中运行,因此this等于window
const btn = document.getElementById('myBtn')
btn.attachEvent('onclick', function(){
    console.log( this === window)   // true
})

  • 事件冒泡(事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点)
e.stopPropergation()  //阻止事件的冒泡
e.preventDefault() //阻止事件的默认行为,比如a标签跳转
  • 事件捕获(不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件)
  • DOM事件流(DOM2级事件规定的事件流包括三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段)
    首先发生的是事件捕获,为截获事件提供了机会。然后是实际的目标接收到事件。最后是冒泡阶段,可以在这个阶段对事件做出响应
  • 事件代理(事件委托)
    事件处理程序过多问题的解决方案就是事件代理。事件代理利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click事件会一直冒泡到document层次。也就是说,我们可以为整个页面指定一个onclick事件处理程序,而不必给每个可单击的元素分别添加事件处理程序
    事件代理的好处
  1. 代码简洁
  2. 减少浏览器内存占用
  3. 不要滥用

相关文章

  • JavaScript事件01——事件流

    大纲:概念(事件、事件流)事件流模型(事件冒泡、事件捕获、DOM事件流) 一、概念: 1、事件:事件就是用户或浏览...

  • 事件对象,事件监听,事件冒泡,事件代理

    一、事件对象 二、冒泡事件:(事件从子元素往父级元素向上触发事件)处理兼容问题:主流浏览器:e.stopPropa...

  • 事件总结

    DOM事件主要内容 事件流 事件注册 事件对象 事件分类 事件代理 什么是DOM事件? 事件是某个行为或者触发,比...

  • Javascript事件系统

    本文内容 事件基础 事件监听方式 事件默认行为 事件冒泡与事件捕获 事件绑定与事件委托 事件基础 注意:本文不会深...

  • Javascript事件-事件冒泡,事件捕获,事件监听和事件委托

    事件处理机制 (一)DOM事件流 DOM模型是一个树形结构,在DOM模型中,HTML元素是有层次的。当一个HTML...

  • 【事件】事件流

    1、JavaScript和HTML之间的交互通过事件实现的。2、事件流描述的是从页面中接收事件的顺序。3、IE 和...

  • 【事件】事件对象

    触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的额信息。(包括导致事件的元...

  • 【事件】事件类型

    DOM3 级事件规定了以下几类事件: UI(User Interface,用户界面)事件,当用户与页面上的元素交互...

  • 2018-09-10JQuery高级应用

    JQuery事件 window事件 鼠标事件 键盘事件 表单事件 事件注册语法$(对象).type(fn)type...

  • JS事件

    ?事件的相关术语 事件类型: 鼠标事件、键盘事件事件名称: click、dbclick等事件目标: 表示与发生事件...

网友评论

      本文标题:事件

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