Skip to content

以同步方式实现事件监听

js
const getElement = (cssSelector) => {
  const dom = document.querySelector(cssSelector)
  // Proxy 代理
  const proxy = new Proxy(dom, {
    get(target, key) {
      if(!key.startsWith('wait')) {
        return Reflect.get(target, key)
      }
      return new Promise(resolve => {
        const eventName = key.replace('wait', '').toLowerCase()

        dom.addEventListener(eventName, resolve, { once: true })
      })
    }
  })
  return proxy
}
(async () => {
  const btn = getElement('#btn')
  while(1) {
    await btn.waitClick;
    console.log('click')
  }
})()

示例

如有转载或 CV 的请标注本站原文地址