2016-07-15 105 views
0

我必须等到动画结束才能获得正确的offset()。top值。等待动画停止

我试过不同的方法(如承诺),但没有作品:console.log被立即命中。为什么?我能做什么?

我的一个尝试的:

$('#main').on('click', 'section > span', function() { 

    el = $(this); 

    var effect = function() { 
     return $('.content').removeClass('showing').addClass('hiding').slideUp(300).attr("aria-hidden","true").closest('section').css('min-height','0'); 
    } 

    $.when(effect()).done(function() { 
     var showTop = el.offset().top - 110; 
     console.log(showTop); 
     $('html, body').animate({scrollTop:showTop}, 'fast', function() { 
     content.removeClass('hiding').addClass('showing').removeAttr("aria-hidden").slideDown(600); 
     }); 
    }); 

} 

感谢。

+0

你想等待哪个动画? –

+0

var效果中的一个。 – gromax

回答

2

$.when的说法应该是承诺/推迟。您可以使用.promise()来获得具有该效果的元素的承诺。

var effect = function() { 
    $('.content').removeClass('showing').addClass('hiding').slideUp(300).attr("aria-hidden","true").closest('section').css('min-height','0'); 
    return $('.content').promise(); 
} 
+0

完美!非常感谢 !我无法理解推迟/承诺... – gromax