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>
在建立一個新的
<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);
});