Javascript 加载繁重的png图像时加载Gif

Javascript 加载繁重的png图像时加载Gif,javascript,jquery,Javascript,Jquery,我将服务器端PHP脚本(图表)生成的png图像加载到HTML IMG元素 PNG图像生成和下载大约需要1秒,所以我想在加载图像时显示gif加载程序。如何使用JS实现此功能?如果浏览器缓存了它,您可以向查询字符串中添加一些内容来打破它。无论哪种方式,您都需要侦听图像的load事件,在设置其src之前,应先绑定该事件(如果已缓存): $('#chart').attr('src', 'chart.php').load(function(){ //something }); 参考: 请注

我将服务器端PHP脚本(图表)生成的png图像加载到HTML IMG元素


PNG图像生成和下载大约需要1秒,所以我想在加载图像时显示gif加载程序。如何使用JS实现此功能?

如果浏览器缓存了它,您可以向查询字符串中添加一些内容来打破它。无论哪种方式,您都需要侦听图像的
load
事件,在设置其
src
之前,应先绑定该事件(如果已缓存):

$('#chart').attr('src', 'chart.php').load(function(){
    //something
});
参考:

请注意该参考底部附近的注意事项,涉及处理图像时的事件:

  • 它在跨浏览器中无法稳定工作,也不可靠
  • 如果图像src设置为与以前相同的src,则在WebKit中无法正确触发
  • 它不能正确地在DOM树上冒泡
  • 对于已经存在于浏览器缓存中的图像,可以停止激发

如果浏览器缓存了它,您可以向查询字符串中添加一些内容来打破它。无论哪种方式,您都需要侦听图像的
load
事件,在设置其
src
之前,应先绑定该事件(如果已缓存):

参考:

请注意该参考底部附近的注意事项,涉及处理图像时的事件:

  • 它在跨浏览器中无法稳定工作,也不可靠
  • 如果图像src设置为与以前相同的src,则在WebKit中无法正确触发
  • 它不能正确地在DOM树上冒泡
  • 对于已经存在于浏览器缓存中的图像,可以停止激发

    • 对于平衡,这在普通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?_...');
      

      对于balance,这在普通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?_...');
      

      非常感谢你!我是这样实现的:
      $('#ajax loader').attr('src','ajax loader.gif')$(“#图表”).hide()$('#chart').attr('src',linkUrl).load(function(){$('#ajax loader').hide();$('#chart').show();})非常感谢!我是这样实现的:
      $('#ajax loader').attr('src','ajax loader.gif')$(“#图表”).hide()$('#chart').attr('src',linkUrl).load(function(){$('#ajax loader').hide();$('#chart').show();})顺便说一句,您显示的代码是jquery语法而不是javascript,但是您的问题中没有jquery标记。那么您想要一个javascript或jquery答案吗?顺便说一句,您显示的代码是jquery语法而不是javascript,但是您的问题中没有jquery标记。那么你想要一个javascript或jquery答案吗?很高兴看到有人使用纯javascript,作为一个提示,你可能会更好地使用更现代的“addEventListener”来支持“onload”。@Xotic750为什么你希望使用香草javascript来实现类似的功能呢?在这个答案中,
      onload
      甚至没有得到正确的实现。不是每个人在编写代码时都可以或希望包含jquery或其他库。是的,他在“onload”用法上有问题。修复了onload声明-仓促键入
      onload
      在DOM级别1的任何地方都能工作,
      addEventListener
      不会(这里主要考虑的是遗留IE),在这种情况下,除了感觉更现代之外,它更多的是输入,没有任何好处。这是真的,新方法的优点是在支持的地方,速度更快。很高兴看到有人使用纯javascript,请注意,您可能会更好地使用更现代的“addEventListener”来支持“onload”。@Xotic750为什么您希望使用香草javascript来实现类似的功能?在这个答案中,
      onload
      甚至没有得到正确的实现。不是每个人在编写代码时都可以或希望包含jquery或其他库。是的,他在“onload”用法上有问题。修复了onload声明-仓促键入
      onload
      在DOM级别1的任何地方都能工作,
      addEventListener
      不会(这里主要考虑的是遗留IE),在这种情况下,除了感觉更现代之外,它更多的是输入,没有任何好处。这是真的,新方法的优点是在支持的地方,速度更快。