在调用下一个函数之前,我无法完成jquery函数。
基本上,我试图让我的新闻文章逐渐消失,并在通过ajax检索下一页文章之前完成所有的淡出动画。
继承我拥有的东西(Sampled仅包括相关功能)。
控制每篇新闻文章淡出的功能......
function fadeArticlesOut() {
var delay = 0;
//set timeout for image to appear (set at 500ms)
$('#news-articles article').each(function(index) {
$(this).delay(delay).fadeTo(800, 0);
delay += 400;
})
};
通过单击分页链接触发的功能。这会捕获通过ajax加载的url,但在此之前,我想运行fadeout函数,即fadeArticlesOut。我想要的是在运行loadProducts函数之前完成淡出动画。
function doPager() {
$('.pagination-controls a').click(function(e) {
e.preventDefault();
fadeArticlesOut();
loadProducts($(this).attr('href'));
history.pushState(null, null, $(this).attr('href'));
historyedited = true;
});
}
function loadProducts(url) {
$('#news-articles').empty().addClass('loading').load(url + ' #news-articles-inner', function() {
$('#news-articles').removeClass('loading');
doPager();
fadeArticlesIn();
});
}
一旦完成,负载产品功能将在新的新闻文章中消失。
到目前为止,我尝试了很多方法,包括使用自定义回调,延迟对象和设置超时。我遇到的问题是我可以让它运行fadeouts,但是不能继续使用ajax内容加载,或者没有fadeouts,但是获取ajax内容。
答案 0 :(得分:7)
您可以使用.promise()
获取承诺,然后添加.done()
处理程序。
function fadeArticlesOut() {
...
return $('#news-articles article').each(function(index) {
...
}).promise();
};
function doPager() {
$('.pagination-controls a').click(function(e) {
var $self = $(this);
...
fadeArticlesOut().done(function(){
loadProducts($self.attr('href'));
});
...
});
}
在完成所有动画后,将调用.done()
处理程序。