0

我试图理解为什么它会这样工作。我的印象是警报对话框会阻止脚本执行。然而,脚本的行为就像在幕后继续执行,而不更新屏幕。

拿这个代码:

function highlightItems(itemA, itemB, msg) {

    $(itemA).effect("highlight", {}, 800);

    window.alert(msg);

    // $(itemB).delay(1);
    $(itemB).effect("highlight", {}, 800);
}

当我关闭警报对话框时, itemB 的高亮效果已经完成。(如果我足够快地关闭警报,我可以捕捉到效果的结尾。)就好像效果在我有机会关闭警报框之前就开始了。

我能想到的是,任何用于计时的 effect() 都被调用 alert() 所抛弃。如果我取消注释 .delay,突出显示按预期工作:它在警报框关闭后立即开始。那么这是否意味着 .delay 函数“重置”了效果计时器?

这不是一个大问题......我只是想了解这里发生了什么。我平时的 Google 技能今天让我失望了。

编辑- jsfiddle 我的意思的一个例子:jsfiddle.net/kA2uV/

编辑 2

这显然只影响相同的 .effect 连续使用两次的情况。如果使用不同的效果,问题不会发生:jsfiddle.net/yXSgu/3/

4

3 回答 3

1

IIRC,jQuery 动画基于日期/时间,它不是主要由 setTimeout 或 setInterval 处理的。当 javascript 停止时,时间还在继续。

编辑:我明白你的意思,虽然我仍然认为它与日期/时间有关,但在这种情况下,jQuery 对 $.now() 的内部使用可能会被警报和 .delay(1) 所抛弃

于 2012-10-10T21:21:47.713 回答
0

警报功能“暂停”程序的状态,因此当它被解除时,程序将恢复。延迟应该在警报之后发生,以确保您等待的时间不会超过预期。

于 2012-10-10T21:22:00.980 回答
0

那是因为突出显示会触发,但警报不会等待它在启动之前完成。这是一个按预期工作的修改版本。(突出显示在警报显示之前结束)

另外,您的示例不会“暂停”突出显示,因为正如另一位海报所说,jQuery 使用时间值来运行动画。

http://jsfiddle.net/yXSgu/

于 2012-10-10T21:22:02.960 回答