我有一个使用setInterval()
重复的动画change()
功能:全局变量,如何避免它们
function change(){
interval = setInterval(c,300);
function c(){...}
c()
}
的c()
功能做的工作。 我也有一个stop()
功能停止所有动画,并恢复初始状态:
function stop(){
clearInterval(interval);
...
};
我读过,是更好地利用var
关键字,而不是声明一个全局变量。但是如果我这样做,我不能从stop()
函数访问interval
。声明interval
以外的change()
函数也给我一个问题。
好吧,我正在尝试本阿斯顿提出的最后一个解决方案。这里的代码:
function Animator() {
var id;
return {
start: start,
stop: stop,
};
function start() {
id = requestAnimationFrame(go);
}
function stop() {
clearAnimationFrame(id);
}
function go() {
// increment the animation
for (var i=0;i<img.length;i++){
var num = randNum(0,img.length-1)
var btn = img[i].nextSibling.nextSibling.childNodes[1]
img[i].setAttribute("src",img_path[num].path);
$(btn).css({"background-color":img_path[num].color,"border":"4px solid"+img_path[num].color});
$(img[i]).animate({width: "-=80px", height: "-=80px"},'slow');
$(img[i]).animate({width: "+=80px", height: "+=80px"},'slow')}
id = requestAnimationFrame(go)
}
}
基本上,当用户按下一个按钮时,图像开始改变其宽度和高度以及它们的颜色。 这是休息:
var animator = new Animator();
function stop(){ //fn related to the stop button
animator.stop()};
function change(){ //fn related to the start button
animator.start()}
我不知道如何正确使用requestAnimationFrame,我现在研究它。但是当我按下开始按钮时,图像只会改变一次,然后停止。 在上面的代码我有一个for循环,所做的工作:
function change(){
interval = setInterval(c,300);
function c(){
for (var i=0;i<img.length;i++){
var num = randNum(0,img.length-1)
var btn = img[i].nextSibling.nextSibling.childNodes[1]
img[i].setAttribute("src",img_path[num].path);
$(btn).css({"background-color":img_path[num].color,"border":"4px solid"+img_path[num].color});
$(img[i]).animate({width: "-=80px", height: "-=80px"},'slow');
$(img[i]).animate({width: "+=80px", height: "+=80px"},'slow')}}
c()}
我承认我没有很清楚如何实现随时随地FUNC? 感谢
编辑:现在的作品(我与其他文件:)工作),但我有问题,停止按钮
我我会尝试解决根本问题。您应该将您的动画编程为一次切换的CSS类,而不是以指定间隔调用的JavaScript函数。 –
由于函数是对象,所以你也可以使用'change'。间隔“如果你想 –
是的,你需要在'change'之外声明它,但是a)你确实应该*明确地声明它,并且b)它不一定需要驻留在全局范围内 – Bergi