$("#img").load(function(){...});
這是jquery提供的一個方法,但是在IE中會有BUG,IE8不支持,IE9以上刷新后也不會執行,只有強制刷新才執行,所以不能使用這個jquery提供的方法
應該使用:
只能通過JS的onload來觸發事件,當然觸發的事件代碼中可以使用jquery代碼(但是,IE8也有BUG,普通刷新的時候圖片從緩存讀入,讀入速度比代碼更快,導致onload代碼不能運行,解決方法看繼續往下看)
document.getElementById('topBanner').onload = function() { var top = $('#nav').offset().top; $(window).scroll(function() { var scroll = $(document).scrollTop(); var pos = scroll - top; if (scroll > top) { $('#nav').css('top', pos + 12 + 'px'); } else { $('#nav').css('top', '12px'); }; });
徹底兼容IE8:
//首先聲明一個空的Image對象 var img = new Image(); //通過img對象調用onload事件;定義事件處理函數,並不執行(類似於在標簽內定義事件) img.onload = function() { var top = $('#nav').offset().top; $(window).scroll(function() { var scroll = $(document).scrollTop(); var pos = scroll - top; if (scroll > top) { $('#nav').css('top', pos + 12 + 'px'); } else { $('#nav').css('top', '12px'); }; }); } //然后再為img對象賦值src,讓這個img對象有具體的指向,才開始執行onload事件。這樣就能兼容IE8了 img.src = document.getElementById('topBanner').src; $(window).resize(function() { top = $('#nav').offset().top; $(window).scroll(function() { var scroll = $(document).scrollTop(); var pos = scroll - top; if (scroll > top) { $('#nav').css('top', pos + 12 + 'px'); } else { $('#nav').css('top', '12px'); }; }); }); }