【问题标题】:jQuery animation callback called too fastjQuery动画回调调用太快
【发布时间】:2014-05-01 22:55:44
【问题描述】:

所以我试图通过这样做来为.load('content.html') 函数设置动画。

function loadContent(c) {
    $('#main-container').stop().animate({
        opacity: 0,
    }, 300, function() {
        $('#main-container').load('./content/' +  c + '.html');
        $(this).stop().animate({
            opacity: 1,
        }, 600);
    });
}

这很简单,我想将不透明度设置为0,加载新内​​容并将不透明度设置回1。问题是在调用函数后立即加载内容,因此在'opacity 0' 发生之前内容会发生变化。我也试过这段代码

function loadContent(c) {
    $('#main-container').stop().animate({
        opacity: 0,
    }, 300, function() {
        setTimeout(function() {
            $('#main-container').load('./content/' +  c + '.html');
        }, 600);

        $(this).stop().animate({
            opacity: 1,
        }, 600);
    });
}

但结果是一样的。有什么提示吗?

我认为这与.animation() 事件异步有关。


上面的两个代码和两个答案都可以正常工作我的代码(整体)中有错字,所以我在loadContent(c) 本身之前调用了.load() 函数,结果是内容立即加载,动画开始-> 内容加载第二次 -> 动画结束。

【问题讨论】:

  • 试试$(this).stop().delay(1500).animate({ ...
  • 试过了,我也试过把它放在.load()之前也不起作用。

标签: javascript jquery html animation


【解决方案1】:

您需要将上一个动画作为回调函数传递给load()

function loadContent(c) {
    $('#main-container').stop().animate({
        opacity: 0
    }, 300, function() {
        $('#main-container').load('./content/' +  c + '.html', function() {
            $(this).stop().animate({
                opacity: 1
            }, 600);
        });
    });
}

这是一个小提琴:http://jsfiddle.net/Lp728/

【讨论】:

  • 我在提问之前试过这个,没有用,我认为这个问题与“动画事件异步”有关。
  • @Kyslik 它在什么方面不起作用?我会再试一次并确保没有语法错误,因为这样就可以了。 api.jquery.com/load "回调函数:如果提供了“完成”回调,则在后处理和HTML插入完成后执行。"
  • @Kyslik 见我上面的小提琴。
  • 好的,我可以看到在小提琴中它工作得很好,但是当我在 localhost 上尝试它时它不能按预期工作(再次加载内容->动画到 0->动画到 1)。我将在实时服务器上尝试它,看看会发生什么+不同的浏览器。
  • 即使在实时服务器上,它也会先加载内容,加载后会“闪烁”(因为已经加载了新内容)。
【解决方案2】:

怎么样:

function loadContentCOMMAS(c) {
    $('#main-container').stop().animate({
        opacity: 0
    }, 300);
    $('#main-container').promise().done(function () {
        $('#main-container').load(c,function () {;
            $(this).stop().animate({
                opacity: 1
            }, 600);
        });
    });
}

编辑:

这是FIDDLE

【讨论】:

  • 我认为逗号与这个问题无关:) [编辑后],我知道逗号的用途,我知道我可以把它留在那里。 (为了起见,我尝试将其删除)。
  • 确实如此,您的动画将不会随 comme 一起执行。
  • 我认为只有较旧的 IE 在 last/only 属性上存在逗号问题。
  • 你是对的,逗号问题不会发生在 chrome 中。我已经改变了我的答案哈哈抱歉:)
  • 我添加了一个例子
猜你喜欢
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
相关资源
最近更新 更多