首页 新闻 会员 周边 捐助

javascript中颜色不停变化的链接。

0
悬赏园豆:100 [已解决问题] 解决于 2015-07-03 11:14

javascript中颜色不停变化的链接  程序如下:(有一处不理解请博友帮忙解答在线等)

script language="JavaScript">
<!--document.linkColor是设置链接的颜色
function IArray() {
 for (var i = 0; i < IArray.arguments.length; i++) 
 {
 this[i] = IArray.arguments[i];
 }
 this.length = IArray.arguments.length;
}

var colors = new IArray("#ff0000","#0000ff","#00ffff","#cccccc","#000000","#ffff00","#ff0000");
delay = 1.;
link = 0;
vlink = 0;
function linkChange() {
link = ((link+1)%colors.length);
vlink = ((vlink+1)%colors.length);
document.linkColor = colors[link];
document.vlinkColor = colors[vlink];
setTimeout("linkChange()",delay*1000);
}
linkChange();
-->
</script>
<br>
<a href="http://www.sina.com.cn">新浪网</a> <a href="http://www.sohu.com">搜狐</a> 
<a href="http://www.163.com">网易</a> <a href="http://www.baidu.com">百度</a>

 为什么把倒数第8行“linkChange();”去掉后颜色链接就不变化了?倒数第10行中setTimeout("linkChange()",delay*1000);的这句程序不是会循环调用linkChange()函数吗,后面的linkChange()应该是可以完全去掉啊

Zuckjet的主页 Zuckjet | 初学一级 | 园豆:21
提问于:2015-07-03 09:58
< >
分享
最佳答案
0

function linkChange(){};只是定义了一个函数体,要执行 首先要调用启动, 没有调用怎么会自己运行呢?当运行起来setTimeout("linkChange()",delay*1000)就会定时delay秒后再次执行linkChange(); 所以说倒数第八行是启动执行函数,而倒数第十行是定时执行函数。懂否?

收获园豆:10
at小怪兽 | 小虾三级 |园豆:760 | 2015-07-03 10:56

哦哦  ,因为setTimeout是定义在linkChange()函数内部,只要该函数执行一次,就可以通过setTimeout不断循环调用inkChange()函数吧?这样的话,连接颜色应该会不断变化啊,为什么我执行了该段程序后文字连接颜色变化了几次后就不再变化了呢?

Zuckjet | 园豆:21 (初学一级) | 2015-07-03 11:00
其他回答(3)
0

linkChange();你去掉这个,setTimeout就不执行,怎么会一直变化呢?

收获园豆:70
顾晓北 | 园豆:10898 (专家六级) | 2015-07-03 10:06

setTimeout("linkChange()",delay*1000); 这句程序不就可以调用linkChange()函数吗?还要加上linkChange()干什么?

支持(0) 反对(0) Zuckjet | 园豆:21 (初学一级) | 2015-07-03 10:07

@dazhuaoyao: 但是你看这个setTimeout是在linkChange函数里面调用的啊,如果你不调用linkChange函数,怎么执行到setTimeout呢?

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2015-07-03 10:16

@顾晓北: javascript中执行程序不就是从上到下执行一遍吗?我在javascript语句中定义了linkChange()函数,那么该函数必定会侄嫂执行一次吧,而setTimeout是定义在linkChange()函数内部,只要该函数执行一次,就可以通过setTimeout不断循环调用inkChange()函数,我的理解有错误吗?

支持(0) 反对(0) Zuckjet | 园豆:21 (初学一级) | 2015-07-03 10:23

@dazhuaoyao: 我晕,你只是定义了一个linkChange函数,你不调用不会执行,这个linkChange函数在执行的时候,settimeout一下,就是说,延迟一段时间以后,再执行一次linkChange函数,然后就这样就会一直执行,但是你不执行第一次,那肯定是根本就不开始。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2015-07-03 10:33

@顾晓北: 哦哦  我好像明白了。多谢哦,不过还有个疑问。就是上面那段程序应该会是循环不断调用linkChange函数的对吧,因此链接的颜色就应该会不停变化,为什么我执行后链接变化了几次后,就不再变化了呢?

支持(0) 反对(0) Zuckjet | 园豆:21 (初学一级) | 2015-07-03 10:41

@dazhuaoyao: 我试了下,一直在变啊。。。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2015-07-03 11:00

@顾晓北: 多谢,刚才是自己的问题,现在一切都明白了,已采纳。

支持(0) 反对(0) Zuckjet | 园豆:21 (初学一级) | 2015-07-03 11:12
0

setTimeout的使用方法: setTimeout("javascript语句", 毫秒),所以你去掉了肯定不会再执行了

Alawn_wu | 园豆:204 (菜鸟二级) | 2015-07-03 10:13

我的意思是保留setTimeout("linkChange()",delay*1000);这句不变,去掉下面一行的单独的linkChange();语句。而且linkChange()函数已经在上面定义了,不是吗?

支持(0) 反对(0) Zuckjet | 园豆:21 (初学一级) | 2015-07-03 10:15

@dazhuaoyao: 确实的settimeout 是在linkchange里面执行的  你肯定得调用他后才会实现sertimeout的

支持(0) 反对(0) Alawn_wu | 园豆:204 (菜鸟二级) | 2015-07-03 10:24
0
function IArray() {
  for (var i = 0; i < IArray.arguments.length; i++) {
    this[i] = IArray.arguments[i];
  }
  this.length = IArray.arguments.length;
}
var colors = new IArray("#ff0000", "#0000ff", "#00ffff", "#cccccc", "#000000", "#ffff00", "#ff0000");
delay = 1.;
link = 0;
vlink = 0;

function linkChange() {
  link = ((link + 1) % colors.length);
  vlink = ((vlink + 1) % colors.length);
  document.linkColor = colors[link];
  document.vlinkColor = colors[vlink];
  //setTimeout是在指定的时间后,将代码段加入js的执行队列。而且只加入一次。
  //可以用另外一个setInterval来实现每间隔指定时间,将代码段加入js的执行队列
  setTimeout("linkChange()", delay * 1000);
}
linkChange(); //方法申明了,不代表被被自动调用。所以linkChange不能去掉。
收获园豆:20
幻天芒 | 园豆:37207 (高人七级) | 2015-07-03 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册