10.第13章:事件

1.事件流:描述從頁面接收事件的順序。IE提出冒泡流,Netscape提出捕獲流。

1.1 事件冒泡

事件開始時由最具體的元素(嵌套最深)接收,然后逐級向上傳播到最外層節(jié)點(文檔)。



1.2 事件捕獲

從最外層不太具體的節(jié)點收到事件,傳遞給最內(nèi)層的具體的節(jié)點。



1.3.DOM事件流

事件捕獲階段、目標(biāo)階段、事件冒泡階段



捕獲階段:事件從ducument->html->body
目標(biāo)階段:事件在div上發(fā)生。在事件處理中被看成冒泡階段的一部分。
冒泡階段:事件傳回document

2.事件處理

2.1.HTML事件處理

指定onclick屬性:



缺點:時差問題、擴(kuò)展事件處理程序的作用域鏈在不同瀏覽器有不同結(jié)果、HTML和JavaScript代碼耦合。
摒棄此種方法,使用JavaScript指定時間處理程序。

2.2.DOM0級事件處理

使用DOM0級方法指定的事件處理程序被認(rèn)為是元素的方法,這時候事件處理程序時在元素作用域中運行,程序中this引用當(dāng)前元素。



2.3.DOM2級事件處理

定義了兩個方法:添加事件addEventListener() 刪除事件 removeEventListener()
接收三個參數(shù):要處理的事件名、作為事件處理的函數(shù)、布爾值。
布爾值為true,表示在捕獲階段調(diào)用事件處理
布爾值為false,表示在冒泡階段調(diào)用時間處理



使用addEventListener()添加的事件處理程序,只能用removeEventListener()移除,移除的參數(shù)與添加參數(shù)相同,通過addEventListener()添加的匿名函數(shù)將無法移除。




重寫之后可以移除

可用的瀏覽器:
2.4.IE9之前版本事件處理

IE實現(xiàn)和DOM2事件處理類似的兩個方法
attachEvent()和detachEvent()。
接收兩個參數(shù):事件名稱,事件處理函數(shù)。IE8及之前版本只支持事件冒泡,所以不需要第三個參數(shù)。
注意:在IE中使用attachEvent()的作用域是全局作用域,this等于window。



使用attachEvent()添加的事件,只能使用detachEvent()來移除,同樣參數(shù)必須相同。


圖片.png
2.5.跨瀏覽器的事件處理

定義了兩個方法addHandler和removeHandler()
接收三個參數(shù),元素,事件類型,事件處理方法。
首先判斷有沒有DOM2的方法
沒有再判斷有沒有IE的方法
沒有就使用DOM1,這里直接給元素添加了屬性。


3.事件對象

3.1 DOM中的事件對象

兼容DOM的瀏覽器都會將event對象傳入到事件處理程序中。



在需要一個函數(shù)處理多個事件時,可以使用type屬性。


  • 阻止特定事件的默認(rèn)行為


  • 停止事件在DOM層次的傳播,只會彈出一次警告框,body上的被禁止傳播。


  • 事件對象的eventPhase屬性:確定當(dāng)前事件位于事件流的那個階段。捕獲1,目標(biāo)處理2,冒泡3。


3.2 IE中的事件對象

訪問IE中的event對象有幾種不同的方式,取決于指定事件處理程序的方法。
i)DOM0級方法添加事件處理程序
event對象作為window屬性存在



ii)DOM2,使用attachEvent(),就會有一個event對象作為參數(shù)被傳入事件處理函數(shù)。


  • 取消給定事件的默認(rèn)行為,與DOM中preventDefault()方法作用相同。


  • 停止事件冒泡,與DOM中stopPropagation()方法作用相同。


3.3 跨瀏覽器事件對象

4 事件類型

4.1 UI事件
  • load事件
    當(dāng)頁面完全加載后在window上出發(fā),當(dāng)體香加載完在img元素上觸發(fā)。
    i)window上的事件有如下兩種方式:




    ii)img的load事件



  • unload事件
    文檔完全被卸載時觸發(fā)。用戶從一個頁面切換到另一個頁面會觸發(fā)。



  • resize事件
    當(dāng)瀏覽器窗口被調(diào)整到一個新的高度或?qū)挾葧r,會觸發(fā)resize事件。


  • scroll事件



    以上代碼輸出頁面垂直滾動位置

4.2 焦點事件

會在頁面獲得或失去焦點時觸發(fā)。


4.3 鼠標(biāo)與滾輪事件

  • 客戶區(qū)坐標(biāo)位置
    相對于瀏覽器窗口的位置:clientX,clientY


  • 頁面坐標(biāo)位置
    判斷在頁面中的位置,從頁面本身而非視口的左邊和頂邊計算的。pageX,pageY。沒有滾動時與clientX,clientY相等。


  • 屏幕坐標(biāo)位置
    相對于整個電腦屏幕的位置:screenX,screenY


  • 四個修改鍵


4.4 鍵盤與文本事件

三個鍵盤事件




1)鍵碼
發(fā)生keydown和keyup事件時,event對象的keyCode屬性會包含一個代碼,與鍵盤上一個特定的鍵對應(yīng)。



2)字符編碼
如果按下的是字符,使用charCode屬性獲取值。

3)textInput事件
用戶在可編輯區(qū)輸入字符時,觸發(fā)該事件。



用戶按上檔鍵和s,data值為S
沒有按上檔鍵,data值為s

5.內(nèi)存和性能

5.1事件委托

對于事件處理程序過多的問題解決方案就是事件委托,利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。



要給所有的li添加事件,只需要為ul添加一個事件。


2.移除事件處理


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容

  • JavaScript 程序采用了異步事件驅(qū)動編程模型。在這種程序設(shè)計風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對象發(fā)...
    劼哥stone閱讀 1,273評論 3 11
  • JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。事件,就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬...
    threetowns閱讀 349評論 0 0
  • js之事件機(jī)制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驅(qū)動...
    道無虛閱讀 2,392評論 0 2
  • 本章內(nèi)容 理解事件流 使用事件處理程序 不同的事件類型 JavaScript 與 HTML 之間的交互是通過事件實...
    悶油瓶小張閱讀 286評論 0 0
  • “大概就是因為不停地在遇到能讓自己有勇氣繼續(xù)走向未來的人,所以生命才有了更完整的意義。從此不再囿于舊日的陰雨,也不...
    豫悅和謙閱讀 198評論 0 0