事件

2020-07-21  本文已影响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标签跳转
  1. 代码简洁
  2. 减少浏览器内存占用
  3. 不要滥用
上一篇下一篇

猜你喜欢

热点阅读