2013-11-28 49 views
1

這裏射擊是我的代碼:在window.onload沒有在IE

var scrollOnLoad = function scrollOnLoad(selector, offset) { 
    window.onload = function() { 
     if ($(window).height() <= 800) { 
      var attempts = 100; 
      var interval = setInterval(function() { 
       var h = $(selector).height(); 
       console.log("attempt #" + attempts + ", h=" + h); 
       if (h > 0 || !attempts--) { 
        $("body,html").animate({scrollTop : h + offset}, '1000'); 
        clearInterval(interval); 
       } 
      }, 50) 
     } 
    } 
} 

,這裏是如何的caling:

scrollOnLoad(".content-wrapper", 50); 

我注意到,window.onload事件不燒成IE(控制檯沒有記錄任何東西) - 任何想法爲什麼?提前致謝!

+2

也許'window.onload'被執行scrollOnLoad'函數之前'解僱? – karaxuna

+0

有什麼辦法可以檢查window.onload是否已經被觸發,如果是的話 - 可以通過編程方式啓動它? – Vytalyi

+0

爲什麼要將'window.onload'封裝到函數中?難道你不能把它放在全局範圍內,所以可以在'onload'實際觸發時執行。 – Teemu

回答

1

可以使用document.readyState屬性:

function scrollOnLoad(selector, offset) { 
    if(document.readyState === 'complete') 
     x(); 
    else 
     document.addEventListener('readystatechange', function(){ 
      if(document.readyState === 'complete') 
       x(); 
     }); 

    function x(){ 
     if ($(window).height() <= 800) { 
      var attempts = 100; 
      var interval = setInterval(function() { 
       var h = $(selector).height(); 
       console.log("attempt #" + attempts + ", h=" + h); 
       if (h > 0 || !attempts--) { 
        $("body,html").animate({scrollTop : h + offset}, '1000'); 
        clearInterval(interval); 
       } 
      }, 50) 
     } 
    } 
} 
+0

作品完美!謝謝! – Vytalyi

+0

@Vytalyi歡迎您:) – karaxuna

0

正如窗口加載完成後得到執行的功能scrollOnLoad評論提及。

現在在更好的情況下,應該在全局範圍內添加這些事件。

所以應該像

window.onload = function() { 
    if(someConditionIsSatisfied){ 

    if ($(window).height() <= 800) { 
      var attempts = 100; 
      var interval = setInterval(function() { 
       var h = $(selector).height(); 
       console.log("attempt #" + attempts + ", h=" + h); 
       if (h > 0 || !attempts--) { 
        $("body,html").animate({scrollTop : h + offset}, '1000'); 
        clearInterval(interval); 
       } 
      }, 50) 
     } 
    } 
}