首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript跳码

Javascript跳码
EN

Stack Overflow用户
提问于 2013-12-10 01:36:34
回答 2查看 48关注 0票数 0

所以我试图用javascript创建一个动画,我正在做的是显示一个图像,等等,显示第二个,等待,显示等等。

由于某些原因,第一个图像显示,当我点击改变它,它跳到第二个。

我的第一张照片

代码语言:javascript
复制
<img src="img/board/1.png" id="spinner" alt="Click Me!" onclick="c1()"> </img>

然后我用这个改变图像。

代码语言:javascript
复制
function c1() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/2.png";}, 1000);
c2();
}
function c2() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/3.png";}, 1000);
c3();
}
function c3() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/4.png";}, 1000);
c4();
}
function c4() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/5.png";}, 1000);
c5();
}
function c5() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/6.png";}, 1000);
c6();
}
function c6() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/7.png";}, 1000);
c7();
}
function c7() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/8.png";}, 1000);
c8();
}
function c8() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/9.png";}, 1000);
//c9();
}
function c9() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/10.png";}, 1000);
}

为什么它会在中间跳过图像。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 01:38:27

您的所有函数都会立即执行,并且每个函数几乎同时设置一个超时。然后,1000 are之后,所有超时都会执行。下一个函数的调用需要延迟1000 is,而不是动画本身。

而不是这样:

代码语言:javascript
复制
function c1() {
  setTimeout(function () { animateSomething1() }, 1000)
  c2();
}

function c2() {
  setTimeout(function () { animateSomething2() }, 1000);
  c3() ...
}

你需要这个:

代码语言:javascript
复制
function c1() {
  animateSomething1(); 
  setTimeout(function () { c2(); }, 1000)
}

function c2() {
  animateSomething2()
  setTimeout(function () { c3() }, 1000);
}

请注意,您的动画非常适合于一个只增加索引并调用自身的单一函数。

代码语言:javascript
复制
function advanceSpinner(i) {
  i = i || 1;

  if (i > 10)
    i = 1; // change this to return if you don't want to run forever

  document.getElementById("spinner").src = "img/board/" + i + ".png";

  setTimeout(function () { advanceSpinner(i + 1) }, 1000);
}
票数 7
EN

Stack Overflow用户

发布于 2013-12-10 01:44:46

您应该将功能添加到超时值本身,而不是将它们放在外部。喜欢

代码语言:javascript
复制
function c8() {
setTimeout(function(){document.getElementById("spinner").src = "img/board/9.png";c9();}, 1000);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20484423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档