天天看點

javascript中的UI事件 — 第13.4.1節

一:什麼是UI事件?

  UI事件指的是那些不一定與使用者操作有關的事件。這些事件在DOM規範出現之前,都是以其他形式存在的。在DOM規範中保留是為了向後相容。ui事件有7種

1.DOMActivate:表示已經被使用者操作過的元素。DOM3中被廢棄。Firefox和chrome可以使用。

2. load:

- 頁面完全加載後再window上面觸發;

- 當所有架構都加載完畢時在架構上面觸發;

- 當圖檔加載完畢時在元素觸發;

- 當嵌入的内容加載完畢時在元素上面觸發。

3. unload:

- 當頁面完全解除安裝後再window上面觸發;

- 當所有架構都解除安裝後再架構集上面觸發;

- 當嵌入的内容解除安裝完畢後再元素上面觸發。

4. abort:在使用者停止下載下傳過程時,如果嵌入的内容沒有加載完,則在元素上面觸發。

5. error:

- 當發生javascript錯誤時在window上面觸發;

- 當無法加載圖像時在元素上面觸發;

- 當無法加載嵌入内容時在元素上面觸發;

- 當有一或多個架構無法加載時在架構集上面觸發。

6.select:當使用者選擇文本框中(input或texterea)的一個或多個字元時觸發

7. scroll:當使用者滾動帶滾動條的元素中的内容時,在該元素上面觸發。元素包含所加載頁面的滾動條。

二:判斷浏覽器是否支援的DOM2級或DOM3級事件?

要确定浏覽器是否支援DOM2級事件規定的HTML事件(除了DOMActive之外,其他事件在DOM2中都是HTML事件),可以這樣來寫:

//浏覽器是否支援DOM2級事件
var isSupported = document.implementation.hasFeature('HTMLEvents','2.0');
//浏覽器是否支援DOM3級事件
var isSupported2 = document.implementation.hasFeature('UIEvent','3.0');
           

三:每個事件的使用方法?

下面的每個測試需要加上封裝過的事件類EventUtil,位址為:http://blog.csdn.net/flyingpig2016/article/details/53392688

1.load事件?

  • 給window對象綁定load事件
EventUtil.addHandler(window,'load',function(event){
    console.log('Loaded!');
})
           
  • 給文檔中的節點綁定load事件
EventUtil.addHandler(images,'load',function(event){
    event = EventUtil.getEvent(event);
    console.log(EventUtil.getTarget(event).src);
    console.log(event.target.src);
})
           
  • 給動态加載的圖檔圖檔綁定load事件方法一:
EventUtil.addHandler(window,'load',function(){
     var image = document.createElement('img');
     EventUtil.addHandler(image,'load',function(event){
         event = EventUtil.getEvent(event);
         console.log(EventUtil.getTarget(event).src);
     })
     document.body.appendChild(image);
     image.src = '../../../../03work/Nifty/img/av3.png';
 })
           
  • 給動态加載的圖檔圖檔綁定load事件方法二:
EventUtil.addHandler(window,'load',function(){
     var image = new Image();
     console.log(image);     //<img>
     EventUtil.addHandler(image,'load',function(event){
         console.log('Image loaded!');
     });
     image.src = '../../../../03work/Nifty/img/av1.png';
     document.body.appendChild(image);
 });
           
  • 給動态加載的js檔案綁定load事件
EventUtil.addHandler(window,'load',function(event){
     var scripts = document.createElement('script');
     EventUtil.addHandler(scripts,'load',function(event){
         console.log('js is load');
     })
     scripts.src = './EventUtil.js';
     document.body.appendChild(scripts);
 });
           
  • 給動态加載的css檔案綁定load事件
EventUtil.addHandler(window,'load',function(){
    var link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    EventUtil.addHandler(link,'load',function(event){
        console.log('css loaded');
    });
    link.href = './1.css';
    document.getElementsByTagName('head')[].appendChild(link);
});
           

2.unload事件?

用的不多,是指在文檔被完全解除安裝後觸發,隻要使用者從一個頁面切換到另個頁面,就會觸發。但是利用這個事件最多的情況是清除引用,避免記憶體洩露。

EventUtil.addHandler(window,'unload',function(event){
    console.log(onunload);
});
           

3.resize事件?

視窗大小發生變化時觸發

EventUtil.addHandler(window,'resize',function(event){
    console.log('Resized');
});
           

4.scroll事件?

标準模式下,除了Safari基于跟蹤滾動位置,其他浏覽器都會通過

<html>

元素來反映這一變化。

EventUtil.addHandler(window,'scroll',function(event){
    console.log(document.body.scrollTop);
})
           

繼續閱讀