jQuery 动画开始

jQuery animate start

有没有办法在 jQuery 动画开始之前调用函数?我想要一个在可能很长的队列中的每个动画之前触发的方法。

我知道 .animate() 函数有 start 选项,但它是在动画添加到队列时调用的,而不是在它实际开始时调用的。

尝试利用 jQuery.Deferred()

var beforeStart = function beforeStart() {
  $("body").append("<br>beforeStart", $.now());
  return $.Deferred(function(dfd) {
    setTimeout(dfd.resolve, 3000)
  }).promise()
};

$.when(beforeStart())
.then(function() {
  $("div").animate({
      top:48
    }, {
      duration:3000,
      start:function() {
        $("body").append("<br>animation start", $.now());
      }         
  });
})
div {
  position:relative;
  top:0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div>abc</div>