乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JS 中的自定義事件和模擬事件

       印度阿三17 2020-04-21
      原文:JS 中的自定義事件和模擬事件

      在 JS 中模擬事件指的是模擬 JS 中定義的一些事件,例如點(diǎn)擊事件,鍵盤事件等。

      自定義事件指的是創(chuàng)建一個(gè)自定義的,JS 中之前沒有的事件。

      接下來分別說一下創(chuàng)建這兩種事件的方法。

      創(chuàng)建自定義事件

      創(chuàng)建自定義事件可以使用 Event 和 CustomEvent 兩種方法,接下來分別做一下介紹。

      1. 利用 Event

      MDN Event

      Event 用法

      event = new Event(typeArg, eventInit);

      typeArg:指定事件類型,傳遞一個(gè)字符串。這里的事件類型指的是像點(diǎn)擊事件(click)、提交事件(submit)、加載事件(load)等等。

      eventInit:可選,也可以以鍵值對(duì)的形式設(shè)置以下屬性。

        bubbles:事件是否支持冒泡,傳遞一個(gè)boolean類型的參數(shù),默認(rèn)值為false。

        cancelable:是否可取消事件的默認(rèn)行為,傳遞一個(gè)boolean類型的參數(shù),默認(rèn)值為false。

        composed:事件是否會(huì)觸發(fā)shadow DOM(陰影DOM)根節(jié)點(diǎn)之外的事件監(jiān)聽器,傳遞一個(gè)boolean類型的參數(shù),默認(rèn)值為false。

      示例

        <section id="Event">
          <div id="root"></div>
          <script type="text/javascript">
            // 創(chuàng)建事件對(duì)象
            const newEvent = new Event('customType', { bubbles:true,cancelable:true,composed:true })
            // 獲取 DOM 元素
            const div = document.getElementById('root')
            // 綁定事件對(duì)象
            document.addEventListener('customType', () => {
              alert('自定式 customType 事件執(zhí)行了')
            })
            // 觸發(fā)事件對(duì)象(真正開發(fā)中可以滿足某個(gè)條件后才觸發(fā)事件)
            div.dispatchEvent(newEvent)
          </script>
        </section>
      

      2. 利用 CustomEvent

      CustomEvent() 可以像 Event() 那樣使用,但它也可以在 Web Workers 中使用(與主線程分離的另一個(gè)線程),可以傳遞跟事件關(guān)聯(lián)的相關(guān)值(detail),detail 的默認(rèn)值為null,類型為any(也就是說可以傳遞任意類型的參數(shù)),這個(gè)值就是和事件相關(guān)聯(lián)的值。

      通過示例可以很明白地看出來兩者的區(qū)別。

        <section id="CustomEvent">
          <div id="root"></div>
          <script type="text/javascript">
            // 創(chuàng)建事件對(duì)象
            const newEvent = new CustomEvent('customType', { 
              bubbles:true,
              cancelable:true,
              composed:true,
              detail: {
                log: '我是 detail 屬性中的'
              }
            })
            // 獲取 DOM 元素
            const div = document.getElementById('root')
            // 綁定事件對(duì)象
            document.addEventListener('customType', () => {
              // 打印 event.detail.log 的值
              alert(`自定式 customType 事件執(zhí)行了,${event.detail.log}`)
            })
            // 觸發(fā)事件對(duì)象(真正開發(fā)中可以滿足某個(gè)條件后才觸發(fā)事件)
            div.dispatchEvent(newEvent)
          </script>
        </section>
      

      可以看到在 event 對(duì)象中會(huì)有 detail 屬性,我們可以輸出 detail 屬性中的內(nèi)容。

      創(chuàng)建模擬事件

      想要模擬用戶的點(diǎn)擊等行為,可以通過模擬事件來實(shí)現(xiàn)。

      步驟:

      1)在 document 對(duì)象上使用 createEvent() 方法創(chuàng)建 event 對(duì)象,這個(gè)方法接收一個(gè)創(chuàng)建類型的字符串,主要有下面四種。

      • UIevents:一般化的 UI 事件,鼠標(biāo)和鍵盤事件都繼承自 UI 事件,DOM3 中是 UIEvent。
      • MouseEvents:鼠標(biāo)事件,DOM3 中是 MouseEvent。
      • MutationEvents:DOM 變動(dòng)事件,DOM3 中是 MutationEvent。
      • HTMLEvents:HTML 事件。

      使

      2)初始化事件對(duì)象

      在使用 document.createEvent() 創(chuàng)建出一個(gè) event 對(duì)象之后,event 對(duì)象上會(huì)得到一個(gè)初始化的屬性,不同類型的 Event 對(duì)象屬性名不同,例如 MouseEvent 類型對(duì)應(yīng)的屬性就是 initMouseEvent .

      3)觸發(fā)事件

      在實(shí)際開發(fā)中當(dāng)滿足一定條件后我們可以使用 DOM元素.dispatchEvent(event) 來觸發(fā)事件。

      接下來以模擬鼠標(biāo)點(diǎn)擊事件為例,說明一下上面的各個(gè)步驟。定義了一個(gè) div 元素,綁定了一個(gè) click 事件處理程序,內(nèi)容是 alert('我不是用戶點(diǎn)擊的'),然后再模擬觸發(fā) click 事件,可以發(fā)現(xiàn)即使在用戶不點(diǎn)擊時(shí)也可以彈出 '我不是用戶點(diǎn)擊的'.

        <section id="SimulateEvent">
          <div id="root"></div>
          <script type="text/javascript">
            // 獲取 DOM 元素
            const div = document.getElementById('root')
            // 綁定事件處理程序
            div.addEventListener('click', () => {
              alert('我不是用戶點(diǎn)擊的')
            }, false)
            // 創(chuàng)建鼠標(biāo)事件對(duì)象
            const event = document.createEvent('MouseEvents')
            // 初始化事件對(duì)象
            event.initMouseEvent('click', true, true, document.defaultView)
            // 觸發(fā)事件對(duì)象(真正開發(fā)中可以滿足某個(gè)條件后才觸發(fā)事件)
            div.dispatchEvent(event)
          </script>
        </section>
      

      從上面的結(jié)果可以看到,即使我們沒有點(diǎn)擊 div 元素,它也會(huì)執(zhí)行綁定的 click 的事件處理程序,原因就在于我們通過程序模擬了點(diǎn)擊事件。

      來源:https://www./content-4-680501.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多