【发布时间】:2017-12-04 01:05:50
【问题描述】:
这是我的小提琴link。
所以我将有多个步骤,应该一个一个地动画。为了让它们一一动画化,我使用了一些 flag 变量。根据它的值,相应的步骤应该是动画的。
但是有一个问题 - 它的值在第一步中没有被改变,这就是为什么当你点击 2(从时间轴)时,只有第一步是动画的。当我在 each() 函数中一个一个地为每个箭头设置动画并且 flag 变量值在箭头的最后一次迭代中被更改时,问题出现在以下部分:
var flag = 0;
function step_1(){
jQuery(".step_1_nav").addClass('active_bullet_point');
jQuery(".step_1 .label").addClass('active_label_text');
var delay = 0;
jQuery('.step_1 .arrows span').each(function(index) {
var $this = $(this);
var total = $('.step_1 .arrows span').length;
$this.delay(delay).animate({opacity:1}, 100, function(){
$this.addClass('white_animated_arrow');
if (index === (total - 1)) {
jQuery(".step_1 .bullet_point").addClass('active_bullet_point');
flag = 1;
}
});
delay += 100;
});
}
jQuery(".step_2_nav").click(function(){
step_1();
console.log(flag); /* here flag returns 0 instead of 1 */
step_2();
});
当我放这部分时
if (index === (total - 1)) {
jQuery(".step_1 .bullet_point").addClass('active_bullet_point');
flag = 1;
}
out of animate 回调函数标志的值被更改为 1,但它会立即发生,而无需等待最后一个箭头的迭代,并且所有 2 个步骤都会立即进行动画处理。
我在这里缺少什么?请问有什么想法吗?
【问题讨论】:
-
$this.delay(delay).animate({opacity:1}, 100, function(){ /* 这是一个回调函数 */ } }),回调函数在 step_2() 函数调用之后执行。因此,标志值保持为 0。
-
@aidadev - 请检查我的答案
标签: javascript jquery animation each