2016-07-15 129 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