JS學習之事件和事件繫結
事件和事件繫結
// 事件和事件繫結
/*
* 什麼是事件?
事件是瀏覽器賦予元素的預設行為,也可以理解為事件時元素天生自帶的,不論是否給其繫結方法,當某些行為觸發的時候,相關的事件都會被執行觸發
* 瀏覽器賦予元素的事件行為
- 滑鼠事件
+ click 點選/單擊事件(PC)
+ dbclick 雙擊事件
+ contextmenu 滑鼠右鍵點選事件
+ mousedown 滑鼠按下
+ mouseup 滑鼠抬起
+ mousemove 滑鼠移動
+ mouseover 滑鼠滑入
+ mouseout 滑鼠滑出
+ mouseleave 滑鼠離開
+ mouseenter 滑鼠進入
+ mousewheel 滑鼠滾輪滾動
+ ...
- 鍵盤事件
+ keydown 鍵盤南下
+ keyup 鍵盤抬起
+ keypress 長按鍵盤(除了Shift、Fn、CapsLook鍵外)
- 手指事件(移動端)
[Touch Event 單手指事件]
+ touchstart 手指按下
+ touchmove 手指移動
+ touchend 手指鬆開
+ touchcancel 觸控中斷
[Gesture Event 多手指事件]
+ gesturestart—手勢開始,手指觸碰當前元素,螢幕上有兩個或者兩個以上的手指
+ gesturechange—手勢變化,手指觸碰當前元素,螢幕上有兩個或者兩個以上的手指位置在發生移動
+ gestureend—手勢結束,在gesturestart後, 螢幕上只剩下兩根以下(不包括兩根)的手指
注意:gesture系列事件目前只有IOS上的瀏覽器支援
- 表單事件
+ focus 獲取焦點
+ blur 失去焦點
+ reset 點選重置按鈕(前提:表單都包含在form中)
+ submit 點選提交按鈕(前提:表單都包含在form中)
+ selecte 有文字被選中
+ change 內容改變(輸入完內容,輸入框失去游標時觸發)
+ input 內容改變(在輸入內容過程中會一直觸發)
+ ...
- 資源事件
+ error 資源載入失敗時
+ load 資源載入成功
+ beforeunload 資源解除安裝之前(window.beforeunload 頁面關閉之前觸發)
+ ...
- CSS3動畫事件
+ transitionend 過渡完成
+ transitionstart 過渡開始
+ transitionrun 正在過渡中
+ ...
- 檢視事件
+ resize 視窗大小改變觸發
+ scroll 滾動條滾動
- ...
* 什麼是事件繫結?
給元素預設的事件行為繫結方法,這樣可以在行為觸發的時候,執行這個方法
- DOM0級事件繫結
語法:[元素].on[事件] = [函式]
document.body.onclick = function(){}
移除繫結:賦值為null或者其他非函式型別的值
document.body.onclick = null
原理:每一個DOM元素物件的私有屬性上有很多類似於"onxxx"的屬性(初始值都是null),給這些代表事件的私有屬性進行賦值,就是DOM0級事件繫結
+ 如果沒有對應事件的私有屬性(例如:DOMContentLoaded)則無法基於這種辦法事件事件繫結
+ 一個事件行為只能繫結一個方法(同一個事件行為繫結多次最後都只會觸發最後繫結的那個)
+ 好處是執行效率快,而且開發者使用起來也方便
- DOM2級事件繫結
語法:[元素].addEventListener([事件],[方法],[捕獲/冒泡])
document.body.addEventListener('click', fn1,false)
移除繫結:[元素].removeEventListener([事件],[方法],[捕獲/冒泡]) 要求所有引數和繫結時的一樣
document.removeEventListener('click', fn1, false)
原理:每一個DOM元素都會基於原型鏈的查詢機制,查詢到EventTarget.prototype上的addEventListener/removeEventListener等方法,基於這些方法實現事件的繫結和移除;
+ DOM2級事件繫結,繫結的方法一般是具名函式(為了方便移除繫結)
+ 凡是瀏覽器提供的實現行為,都可以基於這種方法實現事件繫結和移除(例如:window.addEventLIstener('DOMContentLoaded',fun))
+ DOM2級事件繫結基於事件池機制:同一個元素的同一個事件行為可以同時繫結多個不同的方法,當某一事件行為觸發的時候,會按照給事件型別繫結方法時的順序依次執行所有繫結的方法
*/
function f1(){
console.log('f1');
}
function f2(){
console.log('f2');
}
function f3(){
console.log('f3');
}
document.body.addEventListener('click', f1, false);
document.body.addEventListener('click', f2, false);
document.body.addEventListener('click', f3, false);
// 點選body會移除輸出 f1 f2 f3
相關文章
- JS的事件繫結和事件流模型JS事件模型
- js on繫結事件JS事件
- JS-事件繫結JS事件
- 前端基礎之原生js事件繫結案例前端JS事件
- 事件繫結事件
- Vue事件獲取觸發事件物件和繫結事件物件Vue事件物件
- three.js事件繫結外掛--onEventJS事件
- JavaScript學習筆記10: 事件繫結&監聽JavaScript筆記事件
- JSX繫結事件JS事件
- JavaScript 事件繫結JavaScript事件
- jQuery之_事件繫結與解綁jQuery事件
- JS給全域性繫結事件以及給除某個元素外的其他元素繫結事件JS事件
- 模板語法之--強制資料繫結和繫結事件監聽事件
- 繫結自定義事件事件
- v-on 繫結事件事件
- Vue事件繫結原理Vue事件
- Hooks與事件繫結Hook事件
- zepto繫結事件改變冒泡事件流事件
- 【測試平臺開發】Vue指令、屬性繫結、事件繫結學習教程Vue事件
- vue.js繫結事件監聽器(v-on)Vue.js事件
- jQuery事件中on實現繫結多個事件jQuery事件
- React事件優雅繫結React事件
- 元件繫結原生事件元件事件
- IOS繫結touchend事件失效iOS事件
- React事件繫結的方式React事件
- python tkinter如何繫結事件?Python事件
- 學習筆記八:vue之事件繫結加不加括號筆記Vue事件
- 原生JS--DOM怎麼玩(事件繫結相關)?JS事件
- JS事件流和事件委託JS事件
- 企圖為vuex新增發布訂閱:事件繫結和事件觸發Vue事件
- [JS][Vue]學習記錄之雙向繫結JSVue
- 微信小程式事件繫結微信小程式事件
- 080 元件自定義事件-繫結元件事件
- Swoole 使用on()繫結事件報錯事件
- Silverlight 2 學習筆記之事件的重複繫結問題筆記事件
- react js學習手記:react 事件ReactJS事件
- 【JS基礎】DOM,BOM,事件繫結,ajax,跨域,儲存JS事件跨域
- 用js寫一個繫結事件檢測視窗大小JS事件