Skip to content

写一个通用事件侦听器

约 166 字小于 1 分钟

2022-04-15

提问

写一个通用事件侦听器

一个通用事件侦听器 需要考虑到 浏览器的兼容问题, 在旧浏览器、IE浏览器、现代浏览器中,事件侦听的绑定和移除均有所差别,而且 event 也有差别。

const DomEvent = {
  add(el, type, handler) {
    if (el.addEventListener) {
      el.addEventListener(type, handle, false)
    }
    else if (el.attachEvent) {
      el.attachEvent(`on${type}`, handler)
    }
    else {
      el[`on${type}`] = handler
    }
  },
  remove(el, type, handler) {
    if (el.removeEventListener) {
      el.removeEventListener(type, handler, false)
    }
    else if (el.detachEvent) {
      el.detachEvent(`on${type}`, handler)
    }
    else {
      el[`on${type}`] = null
    }
  },
  getTarget(event) {
    return event.target || event.srcElement
  },
  getEvent(event) {
    return event || window.event
  },
  stopPropagation(event) {
    if (event.stopPropagation) {
      event.stopPropagation()
    }
    else {
      event.cancelBubble = true
    }
  },
  preventDefault(event) {
    if (event.preventDefault) {
      event.preventDefault()
    }
    else {
      event.returnValue = false
    }
  }
}