我正在做这个雪花动画,我想在某些浏览器上将FPS降低一半,所以为此我只需要移动dom一半的时间。我需要在每个片段克隆/动画后设置一个变量。
我无法在克隆之前设置变量,因为那时“i”变量将是通用的,并且对于每个片段它将增加,它需要在片状范围内设置。
$flake.clone().appendTo('#snowContainer').css({
left: x,
top: y,
opacity: startOpacity,
width: sizeFlake + '%',
*** I need to initialize the "i" variable here,
or somewhere before the loop "step" starts ***
color: options.flakeColor
}).stop().animate({'border-spacing': 0 },{
step: function(p, fx) {
angle += 0.01;
xadd = (Math.sin(angle) + (sizeFlake/4) * 1.5)/speed;
yadd = (Math.cos(angle) + (sizeFlake/2) / 2)/speed;
x += xadd;
y += yadd;
*** if "i" variable here is not defined it throws an error ***
if(i%2==0)
{
var move = {top: y + "px", left: x + "px"};
$(fx.elem).css(move);
}
i++;
}, duration: 20000, easing:"linear", complete: function (){ $(this).remove(); //console.log("flake deleted");
}
});
答案 0 :(得分:1)
您可以使用动画的开始回调
http://api.jquery.com/animate/
启动
类型:功能(承诺动画)
动画开始时调用的函数。 (版本添加:1.8)
或检查步骤回调函数的p参数,仅截取动画的第一步。