咱們平時使用的最多的一種方式,就是順着頁面解析的順序依次加載須要的資源文件,如.css、.js、img等資源。javascript
<script src="http://yourdomain.com/script.js"></script>
包含在 <script>元素內部的代碼將被從上至下依次執行。css
在解析外部js文件(或者下載該文件)的時候,頁面的處理會暫時中止。html
引入外部文件的時候,若是<script></script>之間有腳本,將會被忽略。java
同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,中止後續的解析,只有噹噹前加載完成,才能進行下一步操做。jquery
因此默認同步執行纔是安全的。但這樣若是js中有輸出document內容、修改dom、重定向等行爲,就會形成頁面堵塞。ajax
因此通常建議把<script>標籤放在<body>結尾處,這樣儘量減小頁面阻塞。瀏覽器
<script type="text/javascript" defer = "defer" src = "example1.js"></script>
目的是保證不讓頁面等待腳本的下載和執行。安全
<script type="text/javascript" async = "async" src = "example1.js"></script>
異步腳本必定會在頁面load以前執行。app
動態添加文件,適用於大多數的文件:dom
在頁面元素徹底加載完成以後(包括圖像、js文件、css文件等外部文件),就會觸發window對象上的load事件。
兩種定義方式:
一、利用跨瀏覽器事件對象來綁定
EventUtil.addHandler(window,"load",function(event){ console.log("loaded!"); }
二、直接寫入頁面內,事件添加到<body>上
<body onload="console.log('loaded!')">
固然除了做用於body上,也能夠爲圖像元素指定onload事件。
<img src="smile.png" onload = "console.log('img was loaded!')">
預加載圖片即是這樣,先建立一個圖片對象,而後給圖片延遲添加src屬性,這樣就能夠在頁面加載完成以後的空閒時間內,加載想要預加載的圖片。
EventUtil.addHandler(window,"load",function(){ var image = new Image();//這裏可使用for循環來生成多張圖片對象,而後依次賦上src屬性,這樣就能夠提早下載圖片了,也能夠延遲執行這個動做。 EventUtil.addHandler(image,"load",function(event){ console.log("loaded!"); }) image.src = "smile.png"; }
固然也能夠用來生成<script>標籤。
//這些代碼應被放置在</body>標籤前(接近HTML文件底部)
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");//或者先把元素寫到頁面中,而後動態賦予src值。 element.src = "defer.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false);//dom2 else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload);//IE else window.onload = downloadJSAtOnload;//dom0 </script>
也可使用setTimeout來延遲調用函數來加載(適用於上邊的動態添加地址和ajax請求)。
對應於load事件的是unload事件,這個事件在文檔徹底被卸載的時候觸發,切換頁面會發生unload事件,多用於清除引用避免內存泄漏。
<!DOCTYPE html> <html> <head> <script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { alert("加載完成!"); }); </script> </head> <body> <img src="https://images0.cnblogs.com/i/121863/201405/222202573569862.jpg" /> </body> </html>
區別於js原生的onload事件,主要體如今一下幾個方面:
window.onload
必須等到頁面內包括圖片的全部元素加載完畢後才能執行,$(document).ready()
是DOM結構繪製完畢後就執行,沒必要等到加載完畢;window.onload
不能同時編寫多個,若是有多個window.onload
方法,只會執行一個(後邊的覆蓋前面的,能夠把全部的操做都寫處處理函數下面),$(document).ready()
能夠同時編寫多個,而且均可以獲得執行;window.onload
沒有簡化寫法,$(document).ready(function(){})
能夠簡寫成$(function(){})。