好久沒用Jquery了,最近有個東西需要寫一下,就想了想那些讓腳本延緩執行的一些方法有什么區別呢。
(1)當然,第一種方式就是將腳本內嵌在html中相應需要執行的地方,需要等到頁面加載完成的話就放在最后。當然這已經是大家很不屑的做法,一般也就是一些測試啊什么的時候會用用或者代碼就一幾句話,其他很少會這么做了。作為外部文件引入的優點也就不贅述了,一般都明白。
(2)將<Script>標簽從head放到〈/body〉之前,其他html內容之后。這也很好理解,主要的html加載完之后,腳本才開始運行,當然要注意,這里的加載完僅僅指的是DOM加載完,圖片之類的還不一定加載完成。
(3)使用defer(推遲)屬性。這個屬性是表明腳本在執行時不會影響頁面構造,也就是說腳本會在整個頁面解析完成之后再運行,這其實和第二點是一樣的,除了〈Script〉標簽可以放在head里了。但是這個屬性的兼容性有待考證,舊版本的瀏覽器只有IE是支持的,相對較新的瀏覽器倒是都支持了。
(4)使用async(異步)屬性。這個屬性是html新添加的屬性,從英文解釋就可以看出,該屬性是為了頁面之間加載不出現阻塞的情況,是並行加載相關項,所以和defer執行效果相似,但是有一個不同,可能會造成腳本的嚴重問題,就是運行的時機。defer是有順序的,按照原先語句的先后順序執行,這樣對有依賴關系的腳本沒有影響;但是async是下載完成就執行,要是不同腳本之間有依賴關系,就有可能會造成未知的嚴重錯誤(當然也是有可能正常使用的)。
之前說的都是關於腳本加載的先后順序,至於執行的先后順序,方法就更多種多樣了。
(5)在onload事件之后調用,注意這是在頁面所有元素加載完畢后執行的,也就是圖片,flash都要先加載完,腳本才執行;還有,onload才能執行一個,不能執行多個。
a)寫在body的onload事件里:
<html> <body onload="func()"> </body> </html>
<html>
<body onload="func1();func2();func3();">
</body>
</html>
b)寫在腳本代碼里
<script type="text/javascript"> function func(){……} window.onload=func; </script>
<script type="text/javascript"> function func1(){……} function func2(){……} function func3(){……} window.onload=function(){ func1(); func2(); func3(); } </script>
c)Jquery的寫法
$(window).load(function() { ... });
d)JS自定義函數式多次調用(我倒是從來沒用過額```)
<script type="text/javascript"> function func1(){……} function func2(){……} function func3(){……} function addLoadEvent(func){ var oldonload=window.onload; if(typeof window.onload!="function"){ window.onload=func; } else{ window.onload=function(){ oldonload(); func(); } } } addLoadEvent(func1); addLoadEvent(func2); addLoadEvent(func3); </script>
(6)Jquery使用$(document).ready(),這是在DOM加載完畢就執行,不是所有元素加載完成;相對於onload只能執行一個,ready可以有多個且都能執行:
ps:要想使用Js直接實現,還是有點小麻煩的~~
$(document).ready(function(){ ... });
//簡寫成如下 $(function(){ ... });
我所理解的就這樣了,寫個隨筆記錄一下,免得又忘了~