zoukankan      html  css  js  c++  java
  • window.onload

    window.onload 的基本形式:

    window.onload = function () 
    {    
         // Do something... 
    }
    

    特別注意一點:如果直接把新動作附在 window.onload 的話,是會把前一個 window.onload 的動作給蓋掉的。也就是说,同一个JS文件下,只能有一个window.onload

    不過如果現在有兩個動作都需要用到 window.onload ,而且其中一個我不想改動時該怎麼辦呢? (例如是第三方函式庫裡的程式)

    這時可以改用以下的方式:

    var oldOnload = window.onload || function () {}; 
    window.onload = function () 
    {     
        oldOnload();     // Do Something... 
    }
    

    換句話說,就是先把舊的 window.onload 放在一個變數裡,然後在新的 window.onload 裡呼叫它。

    很重要的一點是,一定要加上「 || function () {} 」!這樣做的目的,是怕如果在此之前沒有指定 window.onload (也就是 undefined) 時,瀏覽器會出現 JavaScript 錯誤。

    另外,可以通过将对象绑定事件的方法实现:

    <!DOCTYPE html>    
    <html>    
    <head>    
    <meta charset=" utf-8">    
    <meta name="author" content="http://www.softwhy.com/" />  
    <title>window.onload用法-蚂蚁部落</title> 
    <style type="text/css"> 
    #bg{ 
      100px; 
      height:100px; 
      border:2px solid red; 
    } 
    </style> 
    <script type="text/javascript"> 
    window.attachEvent("onload",bg); 
    window.attachEvent("onload",changeW); 
    function bg(){ 
      document.getElementById("bg").style.backgroundColor="#F90"; 
    } 
    function changeW(){ 
      document.getElementById("bg").style.width="200px"; 
    } 
    </script> 
    </head> 
    <body> 
      <div id="bg"></div> 
    </body> 
    </html>
    

     通过逻辑判断进行实现

    function firstFunction(){
    alert("hello firstFun !");
    }
    function secondFunction(){
    alert("hello secondFun !");
     
    }
     
    function addLoadEvent(func) {   
      var oldonload = window.onload;   
      if (typeof window.onload != 'function') {   
          window.onload = func;   
      } else {     
          window.onload = function() {   
             oldonload();   
             func();   
          }   
      }   
    }  
     
    //测试  
    addLoadEvent(firstFunction);
    addLoadEvent(secondFunction);
    

     那onload中的JS文件的执行顺序是怎样的呢?它是在整个DOM文档加载完成后才会执行的,请看下面的代码

    <html>
     <head>
      <title> New Document </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <meta HTTP-EQUIV="Content-Type" content="charset=utf-8">
     </head>
     <script>
    	alert('2');
     </script>
     <body onload="init1()">
    	 <div id='myDiv' style="height:200px;200px;background-color:#000000">
    		 <script>
    			 alert('3');
    		 </script>
    	 </div>
     </body>
     <script>
     function init1(){
    	alert('1');
     }
     alert('4');
     </script>
    </html>
    

    执行的顺序为:2,3,4,1;所以我们一般不会将页面布局的函数放在onload中,因为这样会造成页面加载的延迟现象。

    总结onload的用法:

    1. 可以在Body 里面执行 <body onload="alert(123)"></body>

    2. 先定义好 在页面加载完成后使用

    <script type="text/javascript">
    function test(){ var aa = "11111"; alert(aa); }
    window.onload = test; </script>

    注解: 这里的window.onload = test; 不要在test后面加() 因为这是在给事件关联触发的方法 如果加() 会立刻引发这个方法的执行(这可能不是我们的本意)

    3. 使用匿名函数 <script>window.onload = function(){alert(321);}</script>

    4. JS中onload多个事件该怎么写?

    <1> <body onload="aa();bb();cc()">用分号隔开就可以了

    <2>
    window.attachEvent("onload",function(){alert('a')});
    window.attachEvent("onload",function(){alert('b')});
    window.attachEvent("onload",function(){alert('c')});

    refer:http://blog.moocss.com/tutorials/javascript-tutorials/526.html

            http://www.softwhy.com/forum.php?mod=viewthread&tid=6191

            http://www.jb51.net/article/32624.htm

  • 相关阅读:
    对象数组深拷贝
    百度地图 轨迹
    vant mp-vue
    Nginx代理webSocket时60s自动断开, 怎么保持长连接
    python_传递任意数量的实参
    python_函数传递列表
    python_形参、实参
    python_函数、局部变量与全局变量
    python_三级字典
    python_字典的使用
  • 原文地址:https://www.cnblogs.com/CBDoctor/p/3526330.html
Copyright © 2011-2022 走看看