最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript判斷頁面加載完之后再執(zhí)行預定函數(shù)的技巧

 更新時間:2016年05月17日 14:59:55   作者:潛行者m  
這篇文章主要介紹了JavaScript判斷頁面加載完之后再執(zhí)行預定函數(shù)的技巧,原理還是利用監(jiān)聽器監(jiān)聽元素事件、被觸發(fā)則執(zhí)行函數(shù),需要的朋友可以參考下

JavaScript 腳本語言的執(zhí)行,是需要觸發(fā)的。一般的做法就是在網(wǎng)頁中,直接編寫幾個函數(shù),有的在代碼被加載的時候就被瀏覽器處理,或者使用類似下面的代碼來觸發(fā)實現(xiàn)函數(shù)的相關(guān)功能。

<div id=”link” onclick=”fun()” ></div>

上面代碼的意思就是,當鼠標點擊 id 為 link 的元素的時候,就觸發(fā)了它的 onclick 事件,然后執(zhí)行使用 JavaScript 定義的 fun 函數(shù)。這樣的做法肯定是很不合理的,因為觸發(fā)操作直接寫進了 HTML 結(jié)構(gòu)里面,內(nèi)容和行為沒有隔離開,對日后的二次開發(fā)或者修改帶來不便。
需要注意的是,當事件處理與對應元素綁定起來的時候,只有在那個元素加載完之后才能進行操作。如果說把處理的腳本放在了 head 區(qū)域,瀏覽器會報錯。因為下面的 HTML 元素還沒有加載出來,head 中的處理腳本已經(jīng)被處理了。

一個好的執(zhí)行 JavaScript 代碼的方法應該是 行為內(nèi)容分離的、在頁面加載后處理 的。所以,處理 JavaScript 代碼我們要用到 監(jiān)聽器 和 window 對象的 load 事件。

監(jiān)聽器

監(jiān)聽器實際上的功能就是行為與內(nèi)容分離的。以前需要在 HTML 中加上一些觸發(fā)事件來觸發(fā) JavaScript 的相關(guān)函數(shù),而現(xiàn)在直接在 JavaScript 中對某個元素的使用監(jiān)聽器,監(jiān)聽這個元素的事件,如果這個元素被觸發(fā)了某些事件,在監(jiān)聽器中又定義了這個事件對應的處理函數(shù),那么就會處理這個函數(shù)。

W3C 的標準方法叫做 addEventListener ,被IE9,chrome,firefox,opera所支持,寫法:

window.addEventListener(‘load',function,false);

早期 IE 中有 attachEvent 方法效果類似:

window.attachEvent(‘onload',function);

使用監(jiān)聽器的方法也很簡單,就是先獲取頁面中的某個元素,然后對這個元素使用監(jiān)聽器,定義監(jiān)聽的事件和對應的事件處理函數(shù),就上文例子:

document.getElementById(‘link').addEventListener(‘click',fun,false);

關(guān)于監(jiān)聽器更加詳細的使用說明,請見文末補充資料。
window.onload 事件

onload 事件只有在整個頁面已經(jīng)完全載入的時候才會被觸發(fā),我們將 JavaScript 代碼寫進 onload 事件中,就可以保證在 HTML 元素被加載完成之后,瀏覽器才會處理我們的 JavaScript 代碼。基礎(chǔ)的寫法:

window.onload = function(){
 //code
}

這樣,這個函數(shù)里面的 code 會在加載完成之后被處理。但是,這種方法有個缺陷,就是只能用于這一個函數(shù)。頁面中無法出現(xiàn)多個 window.onload 事件,如果出現(xiàn)了多個 onload 事件,那么后面的內(nèi)容會覆蓋前面的。
那么,我們可以這樣做,在一個 window.onload 事件中,寫上所有需要加載的函數(shù)名,然后在外面定義函數(shù):

window.onload = function(){
  func1();
  func2();
 }
function func1(){…}
function func2(){…}

這樣做雖然可以,但是很不方便,因為我們需要把所有要加載的函數(shù)名都寫進去,修改起來就會很麻煩。當然辦法肯定是有的,jQuery 就特別提供了很強大的多腳本加載方法,那么原生的 JavaScript 肯定也有辦法。

window.onload 同時處理多個函數(shù)

我們需要編寫一個處理函數(shù),先看一下代碼:

  function addLoadListener(fn){
    if (typeof window.addEventListener != ‘undefined'){
      window.addEventListener(‘load',fn,false);
    }else if(typeof document.addEventListener != ‘undefined'){
      document.addEventListener(‘load',fn,false);
    }else if (typeof window.attachEvent != ‘undefined'){
      window.attachEvent(‘onload',fn);
    }else{
      var oldfn = window.onload;
      if(typeof window.onload != ‘function'){
        window.onload = fn;
      }else{
        window.onload = function(){
          oldfn();
          fn();
        };
      }
    }
  }

簡單的來解析一下,這個自定義的 addLoadListener 函數(shù),傳遞一個 函數(shù)名稱 作為參數(shù)。它首先判斷瀏覽器是否支持相關(guān)的 監(jiān)聽器,如果支持 監(jiān)聽器,就使用 監(jiān)聽器 監(jiān)聽 window 對象的 onload 事件,然后處理這個函數(shù)。這段代碼使用 if 語句判斷了所有瀏覽器的監(jiān)聽事件,是跨瀏覽器兼容的。
我們把這段代碼放在 JavaScript 代碼段的最上面,然后在下面定義相關(guān)函數(shù),然后使用下面語句來加載 JavaScript 函數(shù)了。

addLoadListener(func);
function func() {…}

這樣,有什么 JavaScript 函數(shù)是需要在頁面加載完成之后處理的,直接使用 addLoadListener 函數(shù)即可,而且可以使用多個。通常來說,所有的 JavaScript 最好都使用 onload 事件加載,以避免意外情況發(fā)生。

相關(guān)文章

  • bootstrapvalidator之API學習教程

    bootstrapvalidator之API學習教程

    這篇文章為大家分享了bootstrapvalidator之API學習教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • javascript 操作Word和Excel的實現(xiàn)代碼

    javascript 操作Word和Excel的實現(xiàn)代碼

    javascript 操作Word和Excel的實現(xiàn)代碼, 需要的朋友可以參考下。
    2009-10-10
  • 詳解XMLHttpRequest(二)響應屬性、二進制數(shù)據(jù)、監(jiān)測上傳下載進度

    詳解XMLHttpRequest(二)響應屬性、二進制數(shù)據(jù)、監(jiān)測上傳下載進度

    這篇文章主要為大家詳細介紹了XMLHttpRequest響應屬性、二進制數(shù)據(jù)、監(jiān)測上傳下載進度,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • JS實現(xiàn)紙牌發(fā)牌動畫

    JS實現(xiàn)紙牌發(fā)牌動畫

    這篇文章主要為大家詳細介紹了JS實現(xiàn)紙牌發(fā)牌動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 移動端翻頁插件dropload.js(支持Zepto和jQuery)

    移動端翻頁插件dropload.js(支持Zepto和jQuery)

    這篇文章主要為大家詳細介紹了移動端翻頁插件dropload.js,支持Zepto和jQuery,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 微信小程序的線程架構(gòu)【推薦】

    微信小程序的線程架構(gòu)【推薦】

    這篇文章主要介紹了微信小程序的線程架構(gòu),每個小程序包含一個描述整體程序的app實例和多個描述頁面的page,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • JavaScript 讀URL參數(shù)增強改進版版

    JavaScript 讀URL參數(shù)增強改進版版

    網(wǎng)上有不少JavaScript 讀 URL 參數(shù)的函數(shù),但沒考慮到 URL 中帶 # 符的情況,我的可以處理這種情況,并使用了點對象寫法,優(yōu)化了些性能。
    2008-10-10
  • iframe實現(xiàn)與父頁面跨域隔離的JavaScript?代碼沙箱

    iframe實現(xiàn)與父頁面跨域隔離的JavaScript?代碼沙箱

    這篇文章主要介紹了使用iframe實現(xiàn)與父頁面跨域隔離的JavaScript代碼沙箱,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 監(jiān)控 url fragment變化的js代碼

    監(jiān)控 url fragment變化的js代碼

    url 里面的 #后面的部分 可以實現(xiàn)無刷新的改變url 的值。這個特點非常有用。比如視頻網(wǎng)站土豆中的豆單,你進入視頻列表以后,點擊播放某個視頻。
    2010-04-04
  • jsp 自動編譯機制詳細介紹

    jsp 自動編譯機制詳細介紹

    這篇文章主要介紹了 Jasper的自動檢測實現(xiàn)的機制比較簡單,依靠某后臺線程不斷檢測JSP文件與編譯后的class文件的最后修改時間是否相同,若相同則認為沒有改動,但倘若不同則需要重新編譯,需要的朋友可以參考下
    2016-12-12

最新評論

曲阳县| 罗定市| 盱眙县| 水富县| 沭阳县| 丽水市| 遵义市| 通榆县| 铁力市| 临武县| 望城县| 新乐市| 大埔区| 弥勒县| 丹阳市| 准格尔旗| 郎溪县| 凌云县| 广州市| 江源县| 德庆县| 岫岩| 昭通市| 龙井市| 霍山县| 太和县| 华蓥市| 荃湾区| 法库县| 昌图县| 象山县| 黄山市| 灯塔市| 陆河县| 安新县| 息烽县| 临湘市| 濉溪县| 峨山| 岑巩县| 九江县|