1. 程式人生 > >javascript考點 —— DOM事件

javascript考點 —— DOM事件

一、基本概念:DOM事件級別

DOM0    element.onclick = function(){}

DOM2    element.addEventListener('click',function(){},false)

DOM3    element.addEventListener('keyup',function(){},false)

二、DOM事件模型

捕獲和冒泡,捕獲是自上而下,冒泡是自下而上。

三、DOM事件流

瀏覽器在為當前這個頁面在與使用者互動的過程中,比如點選滑鼠左鍵,這個事件是怎麼傳到頁面上的。一個完整的時間流分三個部分:捕獲、目標階段。也就是說事件通過捕獲到達目標元素,目標元素在上傳到window物件。

四、描述DOM事件捕獲的具體流程

冒泡流程就是捕獲流程倒回去。

下面是一個捕獲流程的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>evet</title>
</head>
<body>
    <div id="ev">
        <style>
            #ev{
                width: 300px;
                height:100px;
                background: red;
                color:#fff;
                text-align:center;
                line-height: 100px;
            }
        </style>
        目標元素
    </div>
    <script>
        var ev=document.getElementById('ev');
        window.addEventListener('click',function(){
            console.log('window captrue');
        },true)
        document.addEventListener('click',function(){
            console.log('document captrue')
        },true)
        document.addEventListener('click',function(){
            console.log('html captrue')
        },true)
        document.body.addEventListener('click',function(){
            console.log('body captrue')
        },true)
        ev.addEventListener('click',function(){
            console.log('ev captrue')
        },true)
    </script>
</body>
</html>

輸出結果是:

將上面的addEventListener的true改為false就是事件冒泡的過程。

五、Event物件的常見應用

event.preventDefault()       //阻止預設事件
event.stopPropagation()      //阻止冒泡事件
evevt.stopImmediatePropagation()       //事件分發
event.currentTarget     //當前所繫結的事件
event.target         //獲取當前觸發事件的元素

六、自定義事件

var eve = new Event('custome')
ev.addEventListener('custome',function(){
    console.log('custome');
});
ev.dispatchEvent(eve);

//CustomEvent也是自定義事件的函式,它除了指定事件名,後面還可以跟一個object作為引數,傳入資料

自定義事件例子,這是自動觸發的:

        var eve = new Event('test')
        ev.addEventListener('test',function(){
            console.log('test')
        })
        ev.dispatchEvent(eve)