主頁 > 前端設計 > JavaScript事件物件總結

JavaScript事件物件總結

2020-09-16 09:45:58 前端設計


JavaScript事件物件總結
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
開發工具與關鍵技術:Adobe Dreamweaver JavaScript
作者:黃富滔
撰寫時間:2020年4月28日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
知識點羅列
1、事件簡介
      事件,就是檔案或瀏覽器視窗中發生的一些特定的互動瞬間
- JavaScript 與 HTML 之間的互動是通過事件實作的。
個人理解:就是訪問HTML頁面的用戶引起的一系列操作,用戶執行了某些操作后,接著對應的代碼就被觸發了,從而出現提示框等等。
2、檔案的加載
  ①無論我們寫JS代碼是內部樣式還是外部樣式,我們都應該是寫在html頁面的下邊。因為瀏覽器加載一個頁面的時候自上到下的,讀取一行就加載一行,所以寫在下邊,是確保頁面完全加載后,再去觸發相關的事件。
②JavaScript加載事件(window.onload)在頁面上只能出現一次,如果出現多次,后面的會把前面的覆寫掉。但是在jQuery加載事件($(document).ready())在頁面上可以出現多個頁面加載事件,并且后面的不會把前面的代碼覆寫。
3、事件物件
①事件物件簡介
當事件的回應函式被觸發時,瀏覽器每次都會將一個事件物件作為實參傳遞傳遞進回應函式,在事件物件中封裝了當前事件相關的一切資訊,比如:滑鼠的坐標 鍵盤那個按鍵被按下,滑鼠滾輪滾動的方向
②瀏覽器兼容問題
在IE瀏覽器中,在IE8以下的瀏覽器中是將事件物件作為window的屬性進行保存的
其他瀏覽器和IE8以上的瀏覽器中,回應函式被觸發時,瀏覽器不會傳遞事件物件。
所以需要對事件物件進行一個兼容  event=window.event||event;
4、事件物件的屬性:
滑鼠 / 鍵盤屬性
屬性 描述 
altKey 回傳當事件被觸發時,"ALT" 是否被按下。 
button 回傳當事件被觸發時,哪個滑鼠按鈕被點擊。 
clientX 回傳當事件被觸發時,滑鼠指標的水平坐標。 
clientY 回傳當事件被觸發時,滑鼠指標的垂直坐標。
screenX 回傳當某個事件被觸發時,滑鼠指標的水平坐標。 
screenY 回傳當某個事件被觸發時,滑鼠指標的垂直坐標。 
ctrlKey 回傳當事件被觸發時,"CTRL" 鍵是否被按下。 
metaKey 回傳當事件被觸發時,"meta" 鍵是否被按下。 
relatedTarget 回傳與事件的目標節點相關的節點。 
shiftKey 回傳當事件被觸發時,"SHIFT" 鍵是否被按下。
5、一些比較常用的事件
滑鼠事件
   ①onclick         單擊事件
   ②ondblclick      雙擊事件
   ③onmousedown     當滑鼠按下時運行腳本
   ④onmouseup       當滑鼠松開時運行腳本
   ⑤onmousemove     當滑鼠移動時運行腳本
   ⑥onmouseover      當滑鼠移動到元素上運行腳本
   ⑦onmousewheel    當滑鼠滾輪滾動時運行腳本

鍵盤事件(一般都會系結給一些可以獲取焦點的物件或則是document)
①onkeydown: 鍵盤被按下事件
②onkeyup: 鍵盤被松開的事件
③keyCode:可以獲取鍵盤的編碼,按下不同的按鍵時,會有不同的編碼
④altKey :alt如果被按下了則回傳true,否則回傳false
⑤ctrlKey:ctrl如果被按下了則回傳true,否則回傳false
⑥shiftKey:shift如果被按下了則回傳true,否則回傳false

6、事件的委派
①簡介
什么是事件委派?當我們為已有的標簽添加一個點擊事件可以的,但是新創建的標簽中,卻無法回應到該點擊事件。當我們想為新創建的標簽有添加一個點擊事件的時候,則需要為新添加的超鏈接需要重新系結。所以事件委派就是用更少的代碼量去解決這個問題的,只系結一次事件,即可應用到多個元素上,即使元素是后添加的,我們可以嘗試將其系結給元素的共同的祖先元素
②事件委派的用法
- 指將事件統一系結給元素共同的祖先元素,這樣當后代元素上的事件觸發時,會一直冒泡到祖先元素,從而通過祖先元素的回應函式來處理事件。比如我們想為無論是已有的還是新創建的li標簽添加點擊事件,我們只需為li的共同祖先ul標簽系結點擊事件
 - 事件委派是利用冒泡,通過委派可以減少事件系結的次數,提高程式的性能
 -事件物件的屬性target:回傳觸發此事件的元素(事件的目標節點),簡單點說就是點那個元素,那個元素就會被觸發

7、事件的系結
使用 物件.事件=函式形式系結事件
它只能同時為同一個元素系結同一事件一次,不能系結多次,如果系結多次,后面的會覆寫掉前面的
例如: btn.onclick=function(){alert(1)}; btn.onclick=function(){alert(2)};最后第二個點擊事件會被觸發
解決辦法:
①IE8以上的瀏覽器和其他瀏覽器
方法:  addEventListener(事件,回呼函式,布林值) 【需要傳入三個引數】
    引數一: 字串形式的事件,不加on,例如 點擊事件用  "click"  表示  
引數二: 回呼函式 function(){這里寫要執行的代碼};
引數三:是否在捕獲階段觸發事件,一般都傳false。(true表示在捕獲階段觸發事件,false反之)。
②IE8級IE8以下的瀏覽器
方法:attachEvent(事件,回呼函式)  【需要傳入兩個引數】
    引數一:  字串形式的事件,加on,例如 點擊事件用  "onclick"  表示  
引數二: 回呼函式 function(){這里寫要執行的代碼};

   注意 :addEventListener()中的this,是系結事件的物件
  attachEvent()中的this,是window
需要統一兩個方法的this
 考慮到瀏覽器兼容問題,所以我們用一個函式對其進行封裝,判斷瀏覽器該用addEventListener還是用attachEvent方法
代碼:// 函式中相當于傳入三個形參
var btn=document.getElementById("btn");
  function Event(eventobj,event,callback){
 if(eventobj.addEventListener){
eventobj.addEventListener(event,callback,false);
}else{
Eventobj.attachEvent("on"+event,callback);
callback.call(eventobj);
}
}
//函式的呼叫 ,呼叫時寫入實參
bind(btn,"click",function(){alert(2);});
說明:Eventobj.attachEvent("on"+事件,回呼函式)中,"on"是以字串的形式寫入的,所以在呼叫函式的時候不需要再以bind(btn,"onclick",function(){alert(2);});進行呼叫,而是bind(btn,"click",function(){alert(2);});

8、JavaScript事件冒泡(Bubble)
- 所謂冒泡指的就是事件的向上傳導,當后代元素上的事件被觸發時,其祖先元素的相同事件也會被觸發
- 在開發中大部分情況冒泡都是有用的,如果不希望冒泡發生可以通過事件物件取消冒泡 event.cancelBubble=true
   -只需在后代元素內被觸發之前加入代碼event.cancelBubble=true。如果有多個后代元素,但是我們不希望它們的最大的祖先元素也觸發相同事件的時候,我們要在所有的后代元素上加上那句代碼。

9、事件的捕獲和事件取消捕獲(setCapture()方法和releaseCapture()方法)
   -該方法可以說支持IE瀏覽器(只會捕獲一次),在谷歌上面呼叫該方會報錯,在火狐上面雖然不報錯,但是不會觸發該方法
  -在IE上,如果呼叫了該方法,無論你點擊了那里,都會進行一次事件的捕獲
語法:事件捕獲    事件物件.setCapture();
      取消捕獲    事件物件.releaseCapture();
    

10、事件的傳播
- W3C綜合了微軟公司和網景公司的方案,將事件傳播分成了三個階段
  ①.捕獲階段
  - 在捕獲階段時從最外層的祖先元素,向目標元素進行事件的捕獲,但是默認此時不會觸發事件
②.目標階段
- 事件捕獲到目標元素,捕獲結束開始在目標元素上觸發事件
③.冒泡階段
- 事件從目標元素向他的祖先元素傳遞,依次觸發祖先元素上的事件

- 如果希望在捕獲階段就觸發事件,可以將addEventListener()的第三個引數設定為true
  一般情況下我們不會希望在捕獲階段觸發事件,所以這個引數一般都是false
  - IE8及以下的瀏覽器中沒有捕獲階段

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/56032.html

標籤:JavaScript

上一篇:Spring 的@service注解出現重名問題

下一篇:頻繁開啟關閉layer彈層導致記憶體增大

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more