JS的事件流的概念


事件的概念:

  HTML中與javascript交互是通過事件驅動來實現的,例如鼠標點擊事件、頁面的滾動事件onscroll等等,可以向文檔或者文檔中的元素添加事件偵聽器來預訂事件。想要知道這些事件是在什么時候進行調用的,就需要了解一下“事件流”的概念。

什么是事件流:

  1,DOM事件流,

  "DOM2事件流"規定的事件流包括三個階段:

    1,事件捕獲階段。

    2,處於目標階段。

    3,事件冒泡階段。

js中一種綁定事件的方式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件流</title>
    <script>

    window.onload = function(){

        var oBtn = document.getElementById('btn');

        oBtn.addEventListener('click',function(){
            console.log('btn處於事件捕獲階段');
        }, true);
        oBtn.addEventListener('click',function(){
            console.log('btn處於事件冒泡階段');
        }, false);

        document.addEventListener('click',function(){
            console.log('document處於事件捕獲階段');
        }, true);
        document.addEventListener('click',function(){
            console.log('document處於事件冒泡階段');
        }, false);

        document.documentElement.addEventListener('click',function(){
            console.log('html處於事件捕獲階段');
        }, true);
        document.documentElement.addEventListener('click',function(){
            console.log('html處於事件冒泡階段');
        }, false);

        document.body.addEventListener('click',function(){
            console.log('body處於事件捕獲階段');
        }, true);
        document.body.addEventListener('click',function(){
            console.log('body處於事件冒泡階段');
        }, false);

    };

    </script>
</head>
<body>
    <a href="javascript:;" id="btn">按鈕</a>
</body>
</html>

效果:

 

  1,addEventListener

  addEventListener是DOM2級事件新增的指定事件處理程序的操作,這個方法接收3個參數:要處理的事件名,作為事件處理程序的函數和一個布爾值,最后這個布爾值如果是true,表示在捕獲階段調用事件處理程序;如果是false,表示在冒泡階段調用事件處理程序。

  2,document,documentElement和document.body三者之間的關系:

    document代表的是整個html頁面,

    document.documentElement代表是的<html>標簽。

    document.body代表的是<body>標簽。

 

出現上圖結果的原因是:

  在標准的“DOM2級事件”中規定,事件流首先是經過事件捕獲階段,接着是處於目標階段,最后是事件冒泡階段。這里可以畫個圖示意一下:

  首先在事件捕獲過程中,document對象首先接收到click事件,然后事件沿着DOM樹依次向下,一直傳播到事件的實際目標。就是id為btn的標簽。

  接着在事件冒泡的過程中,時間開始是由具體的元素(a標簽)接收,然后逐級向上傳播到較為不具體的節點。

 

jQuery的常用事件:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM