jquery - 让 Jquery 函数等待动画完成

标签 jquery animation promise

我知道这个问题已经被问了很多,但我似乎仍然找不到答案。我的标题中有两个单独的 div,当单击其中一个时,它会在页面的主要部分中淡入一些内容。我正在尝试这样做,以便如果已经单击了一个,则新的必须等待旧的淡出才能淡入。我的问题是,它不等待旧的淡出,而是在右侧淡入离开。我省略了 page_2 的函数,但它们是相同的,只是交换了适当的标识符和变量。

var about_me_clicked = false;
var page_2_clicked = false;

$(document).ready(function() {
$('#About_me').click(about_me_clicked_func);
$('#Page_2').click(page_2_clicked_func);

var about_me_clicked_func = function() {  
  if(page_2_clicked){
      $.when(toggle_page_2()).done(toggle_about_me());
      page_2_clicked = !page_2_clicked;
  }
  else toggle_about_me();
  about_me_clicked = !about_me_clicked;
}

var toggle_about_me = function() {
  //do some formatting....
  if (!about_me_clicked) {
      return $('#About_me_main').fadeIn('slow').promise();
  }
  else return $('#About_me_main').fadeOut('slow').promise();

我尝试只使用 .done() 而不使用 $.when() ,但这也不起作用。我还尝试对 fadeIn/fadeOut 使用回调/完整函数,但我不能这样做,因为在某些情况下,两者都没有被单击(当页面首次加载时),因此我无法传递另一个函数。任何帮助将不胜感激,我已经坚持了好几天了!

最佳答案

您可以检查某个元素当前是否正在动画:

if($('#About_me_main').is(':animated'))

或者简单地stop()任何正在进行的动画并清除队列:

$('#About_me_main').stop(true).fadeIn('slow');

关于jquery - 让 Jquery 函数等待动画完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915438/

相关文章:

javascript - 避免 javascript 回调和 promise hell

javascript - 使用 jQuery 查找特定位置的元素?

javascript - CreateJS 如何对矩形的宽度和高度进行动画处理?

android - 如何以编程方式启动滑动以使用 RecyclerView 关闭

javascript - Angular JS Promise + 对象构造函数

node.js - NodeJS - Promise 解析返回空对象

php - 使用 AJAX 动态更新数据库中的文本

javascript - jQuery 从带有附加 HTML 的元素中获取值

javascript - 如何替换不同部分中的拖放元素

CSS 与 nowrap 的过渡不平滑