封裝一個通用的事件監(jiān)聽函數(shù)

封裝一個通用的事件監(jiān)聽函數(shù),可實現(xiàn)普通的事件監(jiān)聽,也可實現(xiàn)事件委托(事件代理)

function bindEvent(el, type, selector, fn) {
  // 如果第四個參數(shù)不存在,則第三個參數(shù)就是fn
  if (!fn) {
    fn = selector
    selector = ''
  }
  // 普通的事件監(jiān)聽
  if (!selector) {
    el.addEventListener(type, fn)
    return
  }
  // 事件委托
  el.addEventListener(type, event => {
    let element = event.target
    // 點擊的元素是否匹配期望的選擇器
    while (!element.matches(selector)) {
      if (element === el) {
        element = null
        break
      }
      element = element.parentNode
    }
    element && fn.call(element, event, element)
  })
}

var beginButton = document.querySelector('.begin')
var body = document.body

// 普通點擊事件
bindEvent(beginButton, 'click', e => {
  e.stopPropagation()
  console.log(e.currentTarget)
})

// 事件委托
bindEvent(body, 'click', '.stop', e => {
  console.log(e.target)
  console.log(e.currentTarget)
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 工廠模式 單體模式 模塊模式 代理模式 職責(zé)鏈模式 命令模式 模板方法模式 策略模式 發(fā)布-訂閱模式 中介者模式 ...
    HelloJames閱讀 1,083評論 0 6
  • 面向?qū)ο缶幊蹋∣OP) 在前面的章節(jié)中,我們學(xué)習(xí)了Kotlin的語言基礎(chǔ)知識、類型系統(tǒng)、集合類以及泛型相關(guān)的知識。...
    Tenderness4閱讀 4,624評論 1 6
  • 01 就在昨天,香港誕生了第一位女特首。 這位女特首來自基層家庭。這對于香港這個兩級分化很嚴重的社會來說,真的是一...
    穎之老師閱讀 665評論 2 2
  • 綿綿的雨 蟲鳴漸漸消散 黑色湮沒了腳下的土壤 嫩芽在土壤里入眠 那些呼嘯而過的聲響 如沖破耳膜般 可你 并未聽到 ...
    把全世界還給你閱讀 320評論 1 0
  • 有一種溫情 有一種戀愛 回想起來 嘴角微揚 淡淡苦澀濃濃的愛 我們牽著手 我們迎風(fēng)走 路上的你總是傻笑 你眼中的我...
    藍尋歡閱讀 181評論 0 1

友情鏈接更多精彩內(nèi)容