【发布时间】:2021-10-22 05:58:44
【问题描述】:
我正在为从带有each 循环的数组接收的多个图像创建一个创建img 元素,但我想一次将它们全部插入到DOM,但它们一次添加一个,换句话说,我想等到所有的元素都被创建后才显示在 DOM 上。
我创建了这个逻辑,希望我能实现我想要的。
const projectData = [
{coverImg: '../someImg-1.png},
{coverImg: '../someImg-2.png},
{coverImg: '../someImg-3.png},
{coverImg: '../someImg-4.png},
]
$(function() {
let imagesArr = []
const projects_container = $('<div></div>')
projects_container.addClass('projects_container')
$.each(projectData, (index, value) => {
const card_block_El = $('<div></div>')
card_block_El.appendTo(projects_container)
const card_img_div_El = $('<div></div>')
const card_img_El = $('<img>')
card_img_El.attr('src', value.coverImg)
card_img_El.appendTo(card_img_div_El)
card_img_div_El.appendTo(card_block_El)
imagesArr.push(card_block_El)
})
if (imagesArr.length >= projetosData.length) {
projects_container.appendTo('#projects')
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="projects"></div>
我的想法是,元素将在循环内一次创建并附加到projects_container,但在循环之后,因为所有图像都已附加到其容器中(由有条件的),当我将容器附加到projects 时,它们将一次全部加载,但这不是正在发生的事情,图像被一次插入到 DOM 中,即使它们已经创建。我刚开始学习 JQuery,我相信我没有做对。
我怎样才能做到这一点?
附:我正在从 Firebase Firestore 获取图像到 projectData 文件并将其导入到此脚本中。
【问题讨论】:
-
请点击edit,然后点击
[<>]sn-p 编辑器并将导入替换为示例数据 -
看起来你的代码应该已经做你想做的事了。是什么让您认为元素一次插入到 DOM 中?
-
@Ouroborus 好吧,我可以看到它。当我运行现场演示时,图像就像:第一个 img...第二个 img...第三个 img...等等。它们不是作为一组 imgs 立即插入的。
-
图像一次加载一个,也许这就是您所看到的。如果您希望一次显示所有图像,请预加载它们,并仅在所有图像完成加载后为其插入 HTML。
-
这能回答你的问题吗? Preload images and insert into DOM
标签: javascript html jquery dom append