2013-04-23 53 views
0

予裝載由服務器端PHP腳本(圖表)所產生的PNG圖像使用以下JS代碼的HTML IMG-元件<img id="chart">的Gif裝載機同時加載重PNG圖像

$('#chart').attr('src', 'chart.php');

的PNG圖像生成和下載大約需要1秒鐘,所以我想在圖像加載時顯示gif加載器。如何用JS實現這個功能?

+0

順便說一句,你顯示的代碼是jQuery語法,而不是JavaScript,但是你的問題中沒有jQuery標記。那麼你想要一個JavaScript或jQuery的答案? – Xotic750 2013-04-23 15:55:39

回答

1
$('#chart').attr('src', 'chart.php').load(function(){ 
    //something 
}); 
+0

非常感謝!我已經這樣實現它:'$('#ajax-loader')。attr('src','ajax-loader.gif'); $('#chart')。hide(); $('#chart')。attr('src',linkUrl).load(function(){('#ajax-loader')。hide(); $('#chart')。show() ;});' – zavg 2013-04-23 15:41:16

1

如果瀏覽器緩存它,你可以添加一些東西到查詢字符串來打破它。無論哪種方式,你要聽的圖像的load事件,這應該之前設置的約束src(如果它的緩存):

var target_url = 'chart.php?_=' + (new Date()).getTime(); 
// Show "loading" 
$('#chart').on("load", function() { 
    // Hide "loading" 
}).attr('src', target_url); 

參考:

請注意該參考底部附近的提示,指的是使用圖像時的事件:

  • 這並不一致,也不可靠地工作,跨瀏覽器的
  • 它不正確的WebKit如果圖像的src設置爲相同的SRC像以前
  • 它不能正常泡了火DOM樹
  • 可以停止火已經生活在瀏覽器的緩存
2

對於平衡圖像,這是非常簡單的純JS做:

var preload = function(element, src) { 

    var img = new Image(); 

    // Apply onload before applying src attribute to avoid IE prematurely firing 
    img.onload = function() { 
     // Replace #chart with image 
     element.parentNode.replaceChild(img, element); 
    }; 

    img.src = src; 
} 

preload(document.getElementById('chart'), 'chart.php?_...'); 
+0

很高興看到有人使用純JavaScript,因爲注意你可能會更好地使用更現代的「addEventListener」來支持「onload」。 – Xotic750 2013-04-23 15:58:31

+0

@ Xotic750爲什麼你很想用vanilla Javascript來做這樣的事情?在這個答案中'onload'甚至沒有被正確實現。 – Ian 2013-04-23 16:11:37

+0

並不是每個人在編寫代碼時都可以或想要包含jquery或其他庫。是的,他的「使用」功能有問題。 – Xotic750 2013-04-23 16:15:20