一、事件流:
? ? ? ? ? ? ? ? 1.綁定事件:
? ? ? ? ? ? ? ? ? ? ? 想要給一個元素綁定事件,我們有兩種方法:使用內聯事件或事件監聽器。在之前的課程中,我們一直使用的是內聯事件來為元素綁定事件
? ? ? ? ? ? ? ? ? ? ? ? 案例見? 事件流.html
? ? ? ? ? ? ? ? ? ? ? 內聯事件: .onclick
? ? ? ? ? ? ? ? ? ? ? 事件監聽: .addEventListener('事件',function(){})
? ? ? ? ? ? ? ? ? ? 兩種方法都能實現相同的效果,能成功的為按鈕綁定了點擊事件,但區別是使用addEventLitener可以無限制第為元素綁定事件,而內聯事件后面的會覆蓋前面的? 案例見 事件流2.html
? ? ? ? ? ? 二、事件冒泡與事件捕獲
? ? ? ? ? ? ? ? ? 用事件監聽器為三個div元素綁定點擊事件,最外層的div寬高是300px,中間的div寬高都是200px,最內層的div寬高都是100px,那么思考一下,點擊最內層的div,事件會如何觸發,是只觸發最內層的div,還是從內到外依次觸發,還是從外到內依次觸發
? ? ? ? ? ? ? ? ? ? ? ? 案例見 事件冒泡.html
? ? ? ? ? ? ? ? 通過上面的例子我們可以看到,事件是從最內層開始觸發,然后依次向外,輸出的順序是div3-div2-div1。導致這種順序的原因是因為:事件流有事件捕獲階段和事件冒泡階段,事件捕獲階段是從最外層元素開始一層一層進入到事件目標(也就是我們點擊的那個元素),到達事件目標后,進入事件冒泡階段,事件從最內層流向最外層,事件默認情況下在冒泡階段觸發,所以我們看到的是先輸出div3,最后輸出div1。
? ? ? ? ? ? ? ? 我們也可以將事件設置為捕獲階段觸發,
? ? ? ? ? ? ? ? ? ? 案例見 事件捕獲.html
? ? ? ? ? ? ? ? 只要在添加事件方法中添加第三個參數為true,事件就會在捕獲階段被觸發,這樣輸出的順序就變成了div1-div2-div3。但是在日常開發中,我們幾乎不用做此修改,讓事件在冒泡階段觸發就可以了。? ?
? ? ? ? ? ? 三、事件委托? 案例見事件委托
? ? ? ? ? ? ? ? 事件委托:可以簡單第理解為將子集的事件委托給父級來處理
? ? ? ? ? ? ? 案例:網頁中有兩個按鈕,他們的父級是一個div標簽,現在我們希望給這兩個按鈕綁定事件,當我們點擊按鈕的時候輸出按鈕的文本內容,按照我們之前學過的知識
? ? ? ? ? ? 四、計時器
? ? ? ? ? ? ? ? 一次性定時器
? ? ? ? ? ? ? ? ? setTimeOut(function(){
//1秒后執行
? ? ? ? ? ? ? ? ? },1000)
? ? ? ? ? ? ? ? ? 停止一次性定時器:clearTimeout();
? ? ? ? ? ? ? ? 永久性定時器
? ? ? ? ? ? ? ? ? setInterval(function(){
? ? ? ? ? ? ? ? //1秒后執行,并且每隔一秒執行一次
? ? ? ? ? ? ? ? ? },1000)
? ? ? ? ? ? ? ? ? 停止永久性定時器的方法:clearInterval();