javascript - 保留旧图像,直到新图像准备好更新

标签 javascript jquery html ajax

我正在使用 setInterval 和 jQuery load 函数定期更新图像标签。

var refresh_days = setInterval(function() { 
  $('#box_name').load("dynamic.php");}, 1000 );

这可行,但在新图像完全加载之前有一点延迟,在此期间没有显示任何内容。

有没有办法可以等到新图像完全加载,然后显示它,以便从用户的 Angular 来看图像立即发生变化?

我的目标浏览器是 Chrome,我不需要它与 IE 兼容。

谢谢

最佳答案

您可以将图像加载到不可见的 <img> 中标签,并使用“load”事件来更新可见的标签。

$('#hiddenImage').attr('src', newImageUrl).load(function() {
  $('#realImage').attr('src', newImageUrl);
});

这样您就知道它在缓存中,因此可见图像的更新应该很快。

如果您要重新加载一大堆内容,那么您将会遇到问题,因为“加载”操作将更新页面,然后浏览器将启动 HTTP 事务来满足<img> 中的隐式“GET”请求标签。因此,你可以做的是:

  1. 将整个 blob 加载到隐藏的 <div>
  2. 有一个 live() 处理程序等待隐藏 div 中图像标记的“load”事件;
  3. 通过将 DOM 子树从隐藏的 div 移动到您真正想要的位置来响应“load”事件。

关于javascript - 保留旧图像,直到新图像准备好更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321118/

相关文章:

javascript - Three.js 中的粒子

javascript - 每 5 秒在浏览器中使用不同参数打开链接

javascript - 为移动设备禁用 jQuery 下拉菜单

javascript - Handlebars.js - 在每个循环、if 语句和子对象中获取父上下文

javascript - 在Javascript中查找二维数组中所有连续1的矩形的坐标

javascript - 如何使用 jstree v3 插件仅进行重新排序

javascript - 对 API 调用中的标点符号进行编码

javascript - 无法清除其他函数中调用的 inverval

Javascript 引用具有重复属性的元素

javascript - jQuery 根据匹配的 id 隐藏类