1. 程式人生 > >JS load事件(UI)

JS load事件(UI)

當頁面完全載入後(包括所有影象、JavaScript檔案、CSS檔案等外部資源),就會觸發window上面的load事件。
有兩種定義onload事件處理程式的方式,第一種方式是使用如下的JavaScript程式碼:

 EventUtil.addHandler(window,"load",function(event){
 alert("loaded!");
 });//關於EventUtil這個物件的具體資訊請參照前面的JS事件物件那篇文章

這是通過JavaScript來指定事件處理程式的方式。
第二種指定onload事件處理程式的方式是為<body>元素前面新增一個onload特性,如下面的例子所示:

<!DOCTYPE html>
<html>
<head>
    <title>load Event Example</title>
</head>
<body onload = "alert("Loaded!")">
</body>
</html>

一般來說,在window上面發生的任何事件都可以在<body>元素中通過相應的特性來指定,因為在HTML中無法訪問window元素。實際上這是為了保證向後相容的一種權宜之計,但所有瀏覽器都能很好的支援這種方式。
影象上面也能夠觸發load事件

<img src = "url" onload = "alert('image loaded')">

這樣在圖片載入完成時就會彈出一個警告框
當然也可以通過相應的JS程式碼來實現.

var image = document.getElementById("myImage");
EventUtil.addHandler(image,"load",function(){
event = EventUtil.getEvent(event);
alert(EventUtil.getTarget(event).src);
});

這裡,使用javaScript指定了onload事件處理程式。同時也傳入了event物件,儘管他也不包含什麼有用的資訊。不過,事件的目標是<img>

元素,因此可以通過src屬性訪問並顯示該資訊.
在建立一個新的<img>元素時,可以為其指定一個事件處理程式,以便圖片載入完成後給出提示。此時,最重要的是要在指定src屬性之前先指定事件,如下面的例子

EventUtil.addHandler(window,"load",function(){
var image = document.createElement("img");
EventUtil.addHandler(image,"load",function(){
    event = EventUtil.getEvent(event);
    alert(EventUtile.getTarget(event).src);
)};
document.body.appendChild(image);
image.src = "url";
)};

在這個例子中,首先為 window 指定了 onload 事件處理程式。原因在於,我們是想向 DOM中新增一個新元素,所以必須確定頁面已經載入完畢——如果在頁面載入前操作 document.body 會導致錯誤。然後,建立了一個新的影象元素,並設定了其 onload 事件處理程式。最後又將這個影象新增到頁面中,還設定了它的 src 屬性。這裡有一點需要格外注意:新影象元素不一定要從新增到文件後才開始
下載,只要設定了 src 屬性就會開始下載。所以必須在指定URL之前先指定事件處理程式。
還有一些元素也以非標準的方式支援load事件。在IE9+,Firefox,Opera,Chrome和Safari3+級更高版本中,<script>元素也會觸發load事件,以便開發人員確定動態載入的JavaScript檔案是否載入完畢。與影象不同,只有在設定了<script>元素的src屬性並且將該元素新增到文件後,才會開始下載JavaScript檔案。換句話說,對於<script>元素而言,指定src屬性和指定事件處理程式的先後順序就不重要了。例項如下

EventUtil.addHandler(window,"load",function(){
    var script = document.createElement("script");
    EventUtil.addHandler(script,"load",function(event)
    {
    alert("Loaded");
    });
    script.src = "url";
    document.body.appendChild(script);
});

這個例子使用了跨瀏覽器的EventUtil物件為新建立的<script> 元素指定了 onload 事件處理程式。此時,大多數瀏覽器中 event 物件的 target 屬性引用的都是 <script>節點,而在 Firefox 3 之前的版本中,引用的則是 document 。IE8 及更早版本不支援 <script>元素上的 load 事件。
IE 和 Opera 還支援 <link> 元素上的 load 事件,以便開發人員確定樣式表是否載入完畢。例如:

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);
});