【问题标题】:how can I asynchronously load an image on page load and display a loading gif while it loads?如何在页面加载时异步加载图像并在加载时显示加载 gif?
【发布时间】:2013-11-14 16:57:35
【问题描述】:

这是我的图片标签。该图像是从数据库动态生成的图形。涉及的数据量可能会有很大差异。有时它会在不到一秒的时间内加载,有时可能需要 6 或 7 秒才能返回并显示图形图像。我想要做的是显示一个简单的占位符 gif,直到加载实际图像。

<img src="@Url.Action("Graph", new { id =  Model.ID })" alt="Graph is Loading..." />

【问题讨论】:

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

完全不考虑你的ASP,你可以添加以加载器为源,以真实图像为数据属性的元素,然后用javascript加载图像,并在真实图像加载后交换图像:

<img src="loader.gif" data-src="/images/menubar.png" />

JS 预加载

$('img').each(function() {
    var self = this,
        src  = $(self).data('src'), // get the data attribute
        img  = new Image();         // create a new image

    img.onload = function() {       // onload
        self.src = this.src;        // swap the source
    }

    img.src = src;                  // set source of new image

    if (this.complete) $(this).load();
});

【讨论】:

  • 这不依赖于服务器与图像一起发送适当的缓存标头吗?如果它是动态生成的图像,我希望 src 交换会导致数据库必须重新生成它,除非服务器设置为缓存结果。
  • @KevinB - 是的,必须启用适当的缓存,否则它只会再次生成图像,并且预加载不会真正起到多大作用。在我看来,如果这是一个问题,应该让服务器端发送正确的标题,但是一个黑客可能是使用两个图像标签,并在图像加载时切换可见性,但隐藏图像不会在大多数浏览器中加载,所以这个解决方案可能需要大量的黑客攻击才能发挥作用。
  • 你能告诉我如何用一张图片做到这一点吗?这会在页面上的所有图像上运行,对吗?
  • 只需将选择器从$('img')更改为$('#ID_of_my_image')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2010-11-21
相关资源
最近更新 更多