【问题标题】:Sequential order of Javascript functionsJavascript函数的顺序
【发布时间】:2014-03-24 22:24:14
【问题描述】:

我的 Javascript 有点问题。我有一个文章标题列表,当您单击标题时,相应的文章会出现在右侧(固定在页面顶部)。我已经让这些文章使用 Javascript 淡入/淡出。我还有一个功能,当您向下滚动并单击文章标题时,将页面慢慢滚动回顶部。

我遇到的问题是,当页面向上滚动并且文章同时更改时,两者的动画都变得非常不稳定,尤其是在 Safari 中。有没有什么办法可以让页面先滚动到顶部,再让文章改?

我基本上是在问是否有办法让我的 Javascript 函数一个接一个地发生,而不是同时发生?

这是我的 Javascript:

$(document).ready(function () {
   $('.scrollup').click(function () {
      $("body").animate({
         scrollTop: 0
      }, 'slow');
      return false;
   });
   $('.articlelist ul li').click(function() {
      var i = $(this).index();
      $('.fullarticle').fadeTo(500,0);
      $('#article' + (i+1)).fadeTo(500,1);
   });
});

任何帮助将不胜感激!

谢谢

【问题讨论】:

标签: javascript jquery html css function


【解决方案1】:

我猜你想在你的文章列表中保留点击功能,并且只有带有滚动类的元素有 2 个动画。

$(document).ready(function () {

    $('.articlelist ul li').click(function () {
        var i = $(this).index();
        if ($(this).is(".scrollup")) {
            $("body").animate({
                scrollTop: 0
            }, 'slow', function () {//when animation completes
                fadeArticle(i);
            });
        } else {
            fadeArticle(i);
        }

    });

    function fadeArticle(i) {
        $('.fullarticle').fadeTo(500, 0);
        $('#article' + (i + 1)).fadeTo(500, 1);
    }
});

【讨论】:

【解决方案2】:

在您对animate() 的调用中,您希望添加一个在完成时调用的函数。 JQuery 提供的 animate 函数将函数作为可选参数。当动画完成时调用该函数。

你可以这样使用:

$('.scrollup').click(function () {
    $("body").animate({
        scrollTop: 0
    }, 'slow', showArticle);
    return false;
});

showArticle 将调用一个函数,该函数会像单击侦听器中的匿名文章一样淡入文章。您可能需要某种方式来传递关于应该显示哪篇文章的参数。

【讨论】:

  • 应该是showArticle,否则你会立即调用该函数
  • 谢谢,我总是犯这个错误。
  • 我不确定我是否完全理解如何将这两个函数链接在一起?
  • @user2798841 我不确定您的确切意思。我已经编辑了我的答案,以提供对 animate 函数回调参数的更多解释。
【解决方案3】:

我对此比较陌生,但我认为这可能有效。我要做的是将这些中的每一个都封装为一个可调用函数,然后将一个函数作为回调传递给另一个。

$(document).ready(function () {
scrollTop(showArticle());
});


function scrollTop(callback) {
    $('.scrollup').click(function () {
        $("body").animate({
            scrollTop: 0
        }, 'slow');
        callback;
    });
}

function showArticle() {
    $('.articlelist ul li').click(function () {
        var i = $(this).index();
        $('.fullarticle').fadeTo(500, 0);
        $('#article' + (i + 1)).fadeTo(500, 1);
    });
}

【讨论】:

  • 这两个功能似乎仍然同时发生
  • 我不相信这段代码与问题中发布的示例有任何不同。它在文档就绪时添加了两个点击侦听器,但第一个侦听器使用回调添加第二个侦听器。
  • 是的,你是对的 Blake 淡化文章的调用需要是 animate 上的回调。 @Wilmer 的答案看起来很可靠。
猜你喜欢
  • 2013-03-21
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多