2015-10-26 143 views
1

我正在尝试使用jQuery在我的应用中动画页面转换。每当我$.get()一个新的部分(从HTML文件)到我的网页,我试图动画它滚动到位。这是我的脚本到目前为止:获取完成后jQuery运行函数

function loadMain(){ 
    $("#homeSection").remove(); 
    $("#blogSection").remove(); 
    $.get('main.html', function(data){ 
     $('#navbar').after(data); 
    }); 
    $('html, body').animate({ 
     scrollTop: $("#homeSection").offset().top 
    }, 1000); 
} 

我的问题是,动画未加载。请注意,$.get()请求应重新插入#homeSection,并最终显示在DOM中。此外,我在FF的控制台中看到这一点:

TypeError: $(...).offset(...) is undefined

而且它指向我的脚本scrollTop:线。

我敢肯定,这涉及到的事实,我想滚动的东西,是不是有尚未,但我不知道如何才能阻止$.get()的异步调用只有当它存在时才有动画。我一直在阅读[deferred][1][promise][2],但概念正在逃避我。任何人都可以指出我的错误和帮助吗?

+3

你确实认识到'$('#navbar')。after(data);'当get完成时运行,对吗?为什么你没有把剩下的东西放在那里呢? *“我不知道如何阻止$ .get()的异步调用”*你不需要/不想这样做。 –

+0

是在dom加载完成后执行的上述脚本? – Lal

+0

@Lal yes:'$()。ready(function(){loadMain();});' – Joum

回答

1

您应该将动画移入成功回调中,以便它在获取完成后也会运行。

function loadMain(){ 
    $("#homeSection").remove(); 
    $("#blogSection").remove(); 
    $.get('main.html', function(data){ 
     $('#navbar').after(data); 
     $('html, body').animate({ 
      scrollTop: $("#homeSection").offset().top 
     }, 1000); 
    }); 
} 
相关问题