我正在处理需要自动加载内容并将其插入页面开头而不影响页面垂直滚动位置的项目。插入内容,计算其高度,然后将其添加到页面的滚动位置对我来说目前为止已经奏效,但现在我遇到了如果存在图像时无法获得正确高度的问题(可能是因为这些图像天堂尚未装入)。如何在将内容插入页面之前加载图像,以便在插入时计算正确的高度?还是有更好的方法去做这件事?在渲染之前加载所有AJAX内容(包括图像)
一些供参考(简化)代码:
$.ajax({
type: "POST",
url: post_url,
dataType: "json",
data: post_data,
success: function(data, stat, jqXHR) {
if (data.content.length) {
var updates = build_content(data.content);
$(updates).insertAfter("#" + id + " .reload_button");
// Works if there's no external content
$("#" + id).scrollTop($("#" + id).scrollTop() + $(updates).height());
}
}
});
更新:
(...)
var updates = build_posts(data.response.posts).hide();
$(updates).insertAfter("#" + id + " .reload_button");
console.log("Waiting for DOM to load completely @ " + new Date().getTime());
updates.ready(function() {
console.log("Done @ " + new Date().getTime());
$(updates).show();
(...)
这是我一直在使用.load()等待直到完全加载的内容尝试显然加载了相同的毫秒,它插入了内容,这不可能是正确的,因为它也必须加载图像。我在这里犯了一个明显的错误吗?
更新:使用.load而不是.ready只会导致回调函数永远不会运行。该文件说,它是越野车,并可能不会被称为如果图像缓存的浏览器,但我不知道这是否真的发生了什么。
我试图做到这一点,但load()回调在插入和隐藏内容之后调用的时间少于一毫秒。更多细节在我原来的职位。 – Fraxtil