事件類型-UI事件、焦點事件

DOM3級事件包括以下幾類事件:

  • UI事件:當用戶與頁面上的元素交互時觸發
  • 焦點事件:當元素獲得或失去焦點時觸發
  • 鼠標事件:當用戶通過鼠標在頁面上執行操作時觸發
  • 滾輪事件:當使用鼠標滾輪時觸發
  • 文本事件:當在文檔中輸入文本時觸發
  • 鍵盤事件:當用戶通過鍵盤在頁面上執行操作時觸發
  • 合成事件:當為IME(輸入法編輯器)輸入字符時觸發
  • 變動事件:當底層DOM結構發生變化時觸發

UI事件

包括以下事件:

1.load事件

當頁面完全加載后(包括所有圖像、js文件、css文件等外部資源)在window上面觸發;當所有框架都加載完畢時在框架集上面觸發;當圖像加載完畢時在<img>元素上面觸發;當嵌入內容加載完畢時在<object>元素上觸發。
兩種定義onload事件處理程序的方式:
(1) js代碼
(2) 為<body>元素添加一個onload屬性

/*第一種方式*/
EventUtil.addHandler(window,"load",function(event){
  //進行相應的操作
})
/*第二種方式*/
<body onload="相應操作"></body>
1.1 圖像上觸發load事件
/*方式1*/
![](...)
/*方式2*/
var image = document.getElementById("myImage");
        EventUtil.addHandler(image, "load", function(event){
            event = EventUtil.getEvent(event);
            alert(EventUtil.getTarget(event).src);
        });

在創建新的<img>元素時,可以為其指定一個事件處理程序,以便圖像加載完之后給出提示,但是重要的是在指定src屬性之前先指定事件,如下:

/*為window指定事件,確保在document.body不會出錯,頁面已經完全加載*/
EventUtil.addHandler(window, "load", function(){
            var image = document.createElement("img");
       //指定src之前先指定事件
            EventUtil.addHandler(image, "load", function(event){
                event = EventUtil.getEvent(event);
                alert(EventUtil.getTarget(event).src);
            });
            document.body.appendChild(image);
            image.src = "smile.gif";            
        });

注意:新圖像元素不一定要從添加到文檔后才開始下載,只要設置了src屬性就會開始下載。

1.2 <script>元素、<link>元素觸發load事件

確定動態加載的js問價時候加載完畢,注意:與圖像不同,只有設置了src屬性并將新元素添加到文檔后,才開始下載,所以對<script>元素來說,指定src屬性和指定事件處理程序的先后順序是不重要的。

  EventUtil.addHandler(window, "load", function(){   
       var script = document.createElement("script");
       EventUtil.addHandler(script, "load", function(event){
           alert("Loaded");
        });
        script.src = "example.js";
        document.body.appendChild(script);
  })
    EventUtil.addHandler(window, "load", function(){
            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.getElementsByTagName("head")[0].appendChild(link);
    });

2. unload事件

與load事件對應,在文檔被完全卸載后觸發,只要用戶從一個頁面切換到另一個頁面,就會發生unload事件。該事件用的最多的就是清除引用,以避免內存泄漏。

/*第一種方式*/
EventUtil.addHandler(window,"unload",function(event){
  //進行相應的操作
})
/*第二種方式*/
<body onunload="相應操作"></body>

unload事件是在一切都被卸載之后才觸發的,那么在頁面加載后存在的那些對象此時就不一定存在了,所以此時再操作DOM節點或元素的樣式就會導致錯誤。

3.resize事件

當瀏覽器窗口被調整到一個新的高度或者寬度時,就會觸發resize事件,該事件在window(窗口)上面觸發,因此可以通過JavaScript或者<body>元素中的onresize特性來指定事件處理程序,推薦的JavaScript方式如下:

EventUtil.addHandler(window,"resize",function(event){});
//傳入的event對象有一個target屬性,值為document 

關于何時觸發resize事件不同瀏覽器有不同的機制,所以不要在這個事件的處理程序中加入大量的代碼。

4.scroll事件

該事件是在window對象上發生的,但它實際表示的是頁面中相應元素的變化

  • 混雜模式下:通過<body>元素的scrollLeft和scrollTop來監控到這一變化。
  • 標準模式下:通過<html>元素來反映這一變化(除了Safari,Safari仍然基于<body>跟蹤滾動位置)
EventUtil.addHandler(window, "scroll", function(event){
            if (document.compatMode == "CSS1Compat"){    //標準模式下
                alert(document.documentElement.scrollTop);
            } else {
                alert(document.body.scrollTop);
            }
        });

與resize事件類似,scroll事件會在文檔被滾動期間重復被觸發,所以盡量保持事件處理程序代碼簡單。

焦點事件

焦點事件會在頁面元素獲得或失去焦點時觸發,利用這些時間并與document.hasFocus()方法及document.activeElement屬性配合,可以知曉用戶在頁面上的行蹤。有6個焦點事件:

  1. blur:在元素失去焦點時觸發,該事件不會冒泡,所有瀏覽器都支持。
  2. focus:在元素獲得焦點時觸發,該事件不會冒泡,所有瀏覽器都支持。
  3. focusin:與focus事件等價,但是它冒泡。
  4. focusout:是HTML事件blur的通用版本。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 事件類型 Web瀏覽器可能發生的事件類型有很多。不同的事件類型具有不同的信息,而“DOM3級事件“規定了以下幾類事...
    ConRon閱讀 895評論 0 1
  • 13.1 事件流 “DOM2級事件”規定事件流包括3個階段:事件捕獲階段,處于目標階段,事件冒泡階段。事件捕獲表示...
    Elevens_regret閱讀 440評論 0 0
  • DOM3 級事件規定了以下幾類事件: UI(User Interface,用戶界面)事件,當用戶與頁面上的元素交互...
    Wonder233閱讀 481評論 0 0
  • 事件流 IE和Netscape開發團隊提出了完全相反的兩種事件流的概念,事件冒泡流和事件捕獲流。 事件冒泡 事件由...
    exialym閱讀 952評論 0 9
  • 我以前也是愛寫日記的人,不知道從什么時候開始,自己越來越懶,懶得都不記錄任何事情了,這是不好的。 我覺得,人要進步...
    forbetterfamily閱讀 201評論 0 2