2013-04-23 55 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