天天看點

JS事件JS事件事件周期event對象常見事件類型

JS事件

事件是可以被JavaScript偵測到的行為,通俗的講就是當使用者與Web頁面進行某些互動時,解釋器就會建立響應的event對象以描述的資訊

常見的事件

  • 使用者點選的頁面上的某項内容
  • 滑鼠經過特定的元素
  • 使用者按下鍵盤上的某個按鍵
  • 使用者滾動或改變視窗大小
  • 頁面元素加載完成或加載失敗

事件句柄

事件句柄(又稱事件處理函數、事件監聽函數),指用于響應某個事件而調用的函數。每一個事件對應一個句柄,在程式執行時,将相應的函數或語句指定給事件句柄,則在該事件發生時,浏覽器便執行指定的函數或語句。

元素.addEventListener(‘事件’,函數);

JS事件JS事件事件周期event對象常見事件類型

事件定義

JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型

DOM事件流

JS事件JS事件事件周期event對象常見事件類型

添加事件addEventListener()

JS事件JS事件事件周期event對象常見事件類型

移除事件removeEventListener()

JS事件JS事件事件周期event對象常見事件類型

IE事件流

IE8及以下

添加事件attachEven()

JS事件JS事件事件周期event對象常見事件類型

移除事件detachEvent()

JS事件JS事件事件周期event對象常見事件類型

IE事件流浏覽器相容

<body>
    <button id="mybtn">點選我</button>

    <script type="text/javascript">
        //相容所有浏覽器
        //addEventListener  attachEvent
        var EventUtil = {
            addHandler:function(element,type,handler);{
                //綁定事件
                //chrom、firefox、IE9等 addEventListener
                //IE8及IE8以下的浏覽器 attachEvent
                if(element.addEventListener){
                    element.addEventListener(type,handler,false);
                }else if(element,attachEvent){
                    element.attachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
                
            }, 
            removeHandler:function(element,type,handler){
                //綁定事件
                //chrom、firefox、IE9等 removeEventListener
                //IE8及IE8以下的浏覽器 detachEvent
                if(element.removeEventListener){
                    element.removeEventListener(type,handler,false);
                }else if(element,detachEvent){
                    element.datachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
            }
        }
    </script>
</body>
           

事件周期

JS事件JS事件事件周期event對象常見事件類型
<body>
    <div id="parent">
        <div id="child" class="child">兒子事件</div>
    </div>
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

    <script type="text/javascript">
        //事件冒泡
        // document.getElementById("parent").addEventListener("click",function(e){
        //     alert("parent事件觸發"+this.id);
        // })
        // document.getElementById("child").addEventListener("click",function(e){
        //     alert("child事件觸發"+this.id);
        // })

        //
        //父 添加了事件
        //   子 添加了事件
        //    
        //    直系親屬樹結構
        //    html
        //    body
        //    parent    添加了事件
        //    child    添加了事件
        //    
        //事件冒泡:直系親屬樹結構中,點選某個元素,由于冒泡作用,親屬樹上的元素凡是添加事件的,都會被觸發
        

        //
        //事件捕獲
        //直系親屬結構
        //    html
        //    body
        //    parent    添加了事件
        //    child    添加了事件
        //    
        // document.getElementById("parent").addEventListener("click",function(e){
        //     alert("parent事件觸發"+this.id);
        // },true)
        // document.getElementById("child").addEventListener("click",function(e){
        //     alert("child事件觸發"+this.id);
        // },true)



        //事件委托    (原理就是事件冒泡)
        //保證隻添加一次事件
        var ul = document.getElementById("ul");
        ul.addEventListener("click",function(event){
            if(event.target.id == "one"){
                alert(1);
            }else if(event.target.id == "two"){
                alert(2);
            }else{
                alert(3);
            }
        },false);
    </script>
</body>
           

event對象

IE9及以上,firefox,chorm浏覽器的event對象

JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型

點選兒子,事件在父親上面

event.target 點選誰誰就是targrt,事件源

event.currentTarget 事件綁定在誰身上,就是指向誰

event.preventDefault() 阻止預設行為

event.stopPropagation() 取消事件捕獲或者冒泡

event. clientY 、event. pageY 、event. screenY(用戶端,頁面,螢幕)

clientY 指浏覽器頂部底邊到滑鼠的位置 (不包括滾動軸)

pageY 指浏覽器頁面頂部底邊到滑鼠的位置 (包括滾動軸)

screenY 指電腦螢幕頂部到滑鼠位置 (與浏覽器縮放無關)

JS事件JS事件事件周期event對象常見事件類型

IE8及以下的浏覽器

event.type 事件類型

event.returnValue = false; 阻止預設行為同preventDefault

event.cancelBubble = true 取消事件冒泡同stopPropagation

srcElement 同target

event對象浏覽器相容

JS事件JS事件事件周期event對象常見事件類型

常見事件類型

JS事件JS事件事件周期event對象常見事件類型

相容

<script type="text/javascript">
         var EventUtil = {
            addHandler:function(element,type,handler);{
                //綁定事件
                //chrom、firefox、IE9等 addEventListener
                //IE8及IE8以下的浏覽器 attachEvent
                if(element.addEventListener){
                    element.addEventListener(type,handler,false);
                }else if(element,attachEvent){
                    element.attachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }  
            }, 
            removeHandler:function(element,type,handler){
                //綁定事件
                //chrom、firefox、IE9等 removeEventListener
                //IE8及IE8以下的浏覽器 detachEvent
                if(element.removeEventListener){
                    element.removeEventListener(type,handler,false);
                }else if(element,detachEvent){
                    element.datachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
            },
            getTarget:function(event){
            	return event.target || event.srcElement;
            },
            preventDefault:function(event){
            	if(event.preventDefault){
            		event.preventDefault();
            	}else{
            		event.returnValue = false;
            	}
            },
            stopPropagation:function(event){
            	if (event.stopPropagation) {
            		event.stopPropagation();
            	}else{
            		event.cancelBubble = true;
            	}
            }
        };
           

常用事件

//UI事件
        //1、load事件  當頁面完全加載後在window上面觸發
        // EventUtil.addHandler(window, "load", function(e){
        // 	alert("Loaded!");
        // });
        
        //img标簽加載完畢
        // var image = document.createElement("img");
        // EventUtil.addHandler(image, "load", function(e){
        // 	alert("圖檔加載完畢");
        // });
        // image.src = "1.png";

        //圖檔預加載
        // var image = new Image();
        // EventUtil.addHandler(image, "load", function(e){
        // 	alert("Image loaded!");
        // });
        // image.src = "smile.gif";
        
        //js動态加載完畢
        // var script = document.createElement("script");
        // EventUtil.addHandler(script, "load", function(event){
        // 	alert("js Loaded");
        // });
        // script.src = "jquery.js";
        // document.body.appendChild(script);
        //相當于  <script src="jquery.js"><//script>
        
        //css動态加載完畢
        // var link = document.createElement("link");
        // link.type = "text/css";
        // link.rel = "stylesheet";
        // EventUtil.addHandler(link, "load", function(event){
        // 	alert("css loaded");
        // });
        // link.href = "example.css";
        // document.getElemnetsByTagName("head")[0].appendChild(link);
        
        //2、unload事件   使用者從一個頁面切換的另一個頁面
        
        //3、resize事件   視窗大小發生變化時觸發
        //4、scroll事件   主要針對新舊浏覽器
        
        //焦點事件     
        //1、 blur  元素失去焦點時觸發
        //2、 focus  不支援冒泡,元素擷取焦點時觸發
        //3、 focusin  支援冒泡,元素擷取焦點時觸發,支援事件浏覽器是IE5.5+,Safari5.1+,chrome等
        //4、 focusout  同blur,元素失去焦點時觸發,支援事件浏覽器是IE5.5+,Safari5.1+,chrome等
        //5、 DOMFocusIn 同focus,元素擷取焦點時觸發
        //6、 DOMFocusOut  同blur,元素失去焦點時觸發
        
        //滑鼠事件
        //1、 click  單擊事件
        //2、dbclick  輕按兩下事件
        //3、mousedown  滑鼠按下時觸發的事件
        //4、mouseup  滑鼠松開時觸發的事件
        //mousedown + mouseup = click
        //mousenove   滑鼠在元素内移動是執行
        //mouseout   滑鼠離開元素或其子元素的時候執行
        //mouseover  滑鼠進入元素或其子元素的時候執行
        
        //mouseenter   //隻能進入目标元素才觸發
        //mouseleave   //隻能離開目标元素才觸發
        
           

焦點事件

1、 blur  元素失去焦點時觸發
    2、 focus  不支援冒泡,元素擷取焦點時觸發
    3、 focusin  支援冒泡,元素擷取焦點時觸發,支援事件浏覽器是IE5.5+,Safari5.1+,chrome等
    4、 focusout  同blur,元素失去焦點時觸發,支援事件浏覽器是IE5.5+,Safari5.1+,chrome等
    5、 DOMFocusIn 同focus,元素擷取焦點時觸發
    6、 DOMFocusOut  同blur,元素失去焦點時觸發
           

滑鼠事件

1、 click  單擊事件
    2、dbclick  輕按兩下事件
    3、mousedown  滑鼠按下時觸發的事件
    4、mouseup  滑鼠松開時觸發的事件
    mousedown + mouseup = click
    mousenove   滑鼠在元素内移動是執行
    mouseout   滑鼠離開元素或其子元素的時候執行
    mouseover  滑鼠進入元素或其子元素的時候執行
    
    mouseenter   //隻能進入目标元素才觸發
    mouseleave   //隻能離開目标元素才觸發
           
JS事件JS事件事件周期event對象常見事件類型
JS事件JS事件事件周期event對象常見事件類型

keydown事件:按鍵被按下時觸發,支援keyCode

任意按鍵皆可觸發

JS事件JS事件事件周期event對象常見事件類型

keyup事件:按鍵被擡起時觸發,支援keyCode

JS事件JS事件事件周期event對象常見事件類型

keypress事件:按鍵被按下時觸發,支援charCode(字元碼),keyCode(鍵碼)不穩定

字元觸發

JS事件JS事件事件周期event對象常見事件類型

textInput事件

JS事件JS事件事件周期event對象常見事件類型

DOMNodeInserted事件:添加被觸發

JS事件JS事件事件周期event對象常見事件類型

DOMNodeRemoved事件:删除被觸發

JS事件JS事件事件周期event對象常見事件類型

DOMNodeInsertedIntoDocument事件:添加之前被被觸動

JS事件JS事件事件周期event對象常見事件類型

DOMNodeRemovedFromDocument事件:删除之前被觸發

JS事件JS事件事件周期event對象常見事件類型

DOMSubtreeModified事件:任何變化都會被觸發

JS事件JS事件事件周期event對象常見事件類型

DOMContentLoaded事件:在DOM樹之後就觸發,不理會圖像、JavaScript檔案、css檔案或其他資源是否已經下載下傳

DOMContentLoaded事件的速度一定快于laod事件

JS事件JS事件事件周期event對象常見事件類型

readystatechange事件:情緒化,限制IE,很難預料

JS事件JS事件事件周期event對象常見事件類型

hashchange事件

JS事件JS事件事件周期event對象常見事件類型

移動端事件類型

touchstart:手指觸摸螢幕

touchmove:手指在螢幕上滑動

touchend:手指從螢幕上移開

**touchcancel:**當系統停止跟蹤觸摸時觸發

JS事件JS事件事件周期event對象常見事件類型

多手指操作螢幕時

JS事件JS事件事件周期event對象常見事件類型

繼續閱讀