在实际显示AJAX内容之前加载它们


Loading AJAX contents before actually displaying them

在动画完成后加载AJAX请求。但是,我想加载ajax,在加载它的地方隐藏(),然后在动画完成后简单地显示()。我的想法是,我不必担心用户等待图像加载,并且我可以在等待动画完成的所有地方复制这一点。即使只是文本。

我可以简单地把它放在一些div样式为display: none;,并隐藏它,但它仍然困扰着我,从技术上讲,它仍然"存在"在页面上。是否有某种方法可以将内容加载到用户根本看不到的地方?

解决。这是真的,我不希望它在DOM,并希望有一些CSS3/HTML5之类的东西,将"持有"元素。另外,我知道别人有很好的方法,所以我需要最好的。我想我明白了。谢谢,每一个人。

创建如下css类:

.hiddenelement
{
    position:absolute !important;
    left:0% !important;
    top:0% !important;
    width:0% !important;
    height:0% !important;
}

隐藏元素时使用.addClass('hiddenelement'),显示元素时使用.removeClass('hiddenelement')

当然,如果你有标记为!important的内联样式,这将不起作用。

注意:我相信没有定位也可以工作。

您可以将内容从屏幕上加载(例如position: absolute; left: -500px;),但这与将其加载到需要的位置并将其设置为display: none没有什么不同。另外,你必须在显示它之前移动它。

我认为你第二段的第一个建议是你应该做的:将它加载到一个样式为display: none的div中,然后简单地重置显示属性或在动画完成时将元素淡出。

你完全正确。您必须将内容加载到页面上的容器中,以便浏览器知道它需要开始处理它。这样做并没有什么"错",所以不要让它困扰你:)

var container = $('#myContainer');
container.hide();
container.html(ajaxResult);
container.fadeIn();

应该可以了…

我相信你甚至可以这样做:

$('#myContainer').hide().html(ajaxResult).fadeIn();

听起来你在试图解决一个不需要解决的问题。用户不会在意它是否"在"某个地方,因为你很快就会显示它,所以你不需要"模糊"它。也就是说,如果使用.ajax()而不是.load(),则可以完全控制返回的数据;您不需要将它添加到DOM中,直到您需要。进入DOM后,如果以后再次需要,可以使用.detach()将其删除,而不会破坏它。

不确定我是否理解正确,但您可以这样做:

start_animation();
$.get('url', function(response) { stop_animation_and_show_content(response); });
function stop_animation_and_show_content(html) {
    // ...
}