好久沒用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(){
...
});
我所理解的就這樣了,寫個隨筆記錄一下,免得又忘了~
