仅在加载图像后才将其添加到DOM
Appending an image to the DOM only after it is loaded
目前我有一个img
元素,它使用top
样式来显示一个精灵,我想动态地为另一个非精灵图像更改它。我目前正在做以下操作:
<span id="container">
<img src="sprite.png" style="top:-40px;">
</span>
Javascript: var newImgEl = document.createElement('img');
newImgEl.setAttribute('src', 'other-image.png'); // (1)
newImgEl.style.top = "0px";
var containerEl = document.getElementById('container');
containerEl.innerHTML = '';
containerEl.appendChild(newImgEl); // (2)
我找不到的是:将图像加载在(1)或(2)?我无法测试慢速连接的效果,但我怀疑如果它在(2)中加载,样式将在图像加载之前发生变化,短暂地显示出精灵的意外部分。如果是这样,我如何启动加载并在加载完成后将元素追加到DOM ?
由于在实际附加到DOM之前只需通过更改src
属性即可加载图像,因此我已经完成了以下操作,这不需要超时:
var newImgEl = document.createElement('img');
newImgEl.addEventListener('load', function() {
newImgEl.style.top = "0px";
containerEl.innerHTML = '';
containerEl.appendChild(newImgEl);
});
newImgEl.setAttribute('src', src); // Loads the image.
我还没有检查它是否跨浏览器工作
你要做的就是将新图像添加到DOM中,这样它就可以从服务器加载,然后非常快速地重置所有与大小和位置相关的样式。
您可以根据您的具体情况设置setTimeout
时间。
newImgEl.style。
function someFunction()
{
var newImgEl = document.createElement('img');
newImgEl.setAttribute('src', 'other-image.png'); // (1)
newImgEl.style.top = "-10000px";
var containerEl = document.getElementById('container');
containerEl.innerHTML = '';
containerEl.appendChild(newImgEl); // (2)
setTimeout(function()
{
newImgEl.style.top = '0px';
},250);
};
相关文章:
- 如何判断何时将dom节点添加到文档中
- 向动态生成的DOM添加Angular自定义指令
- 如果移除并重新添加DOM元素,则ng单击绑定丢失
- 使用 Knockout 动态添加 dom 元素
- jquery使用$.on来添加dom元素
- 如何在 HTML 结构中添加 DOM 模型
- 如何强制.prepend()和.append()添加DOM对象,而不是文本
- AngularJS添加DOM元素
- 添加DOM视图太慢了,需要一种更好的方法来缓存一次视图并重用它供以后使用
- 带有模板的Dojo小部件,在小部件加载时更改模板(添加DOM元素)
- 添加 DOM 元素,什么是正确的方法
- 如何在画布上添加DOM对象
- 如何在每次迭代中添加DOM对象
- jQuery show()不是一个函数-用于添加DOM元素
- 只能添加dom元素,但不能删除它们
- 在单击按钮时动态添加DOM元素
- 添加 DOM 元素时获取通知
- 如何在React中添加dom
- 如何在Div背景中添加DOM图像对象
- 如何在按钮中添加DOM附加的功能