0

我正在使用以下脚本和后来的 onclick 事件。如果我使用 onclick,我的旋转横幅会丢失它并开始以随机间隔显示图片。我想我应该覆盖第一段代码末尾的“setTimeout”。问题是如何?

<script language="JavaScript" type="text/javascript">
<!--
var RotatingImage1_Index = -1;
var RotatingImage1_Images = new Array();
RotatingImage1_Images[0] = ["images/ban_image1.png","",""];
<!-- 15 Images in total-->
RotatingImage1_Images[14] = ["images/ban_image2.png","",""];

function RotatingImage1ShowNext(){
RotatingImage1_Index = RotatingImage1_Index + 1;
   if (RotatingImage1_Index > 14)
   RotatingImage1_Index = 0;
   eval("document.RotatingImage1.src = RotatingImage1_Images[" + RotatingImage1_Index + "][0]");
   setTimeout("RotatingImage1ShowNext();", 4000);}
// -->
</script>
<img src="images/ban_image1.png" id="ban_img1" name="RotatingImage1">

这部分工作正常。

<div id="ban_next" align="left">
<a href="#" onclick="RotatingImage1ShowNext();return false;">
<img src="images/ban_next.png" id="ban_nxt1"></a></div>

这部分也可以,但只有当我将“setTimeout”设置为“0”时才能正确。对不起,我对此完全陌生。我正在查看这个 stackoverflow.com 问题,但我不知道如何在这里实现。

我提前谢谢你。

编辑:旋转图像自动启动。它每 4 秒显示一个新图像。图片上有文字,或者更好的内幕笑话。读者应该很想阅读它们,但是如果自动旋转引起了注意,则必须保持该注意整整一分钟才能看到所有图像。那可能是太长了。所以我想实现一个按钮来覆盖计时器并“点击”显示下一个图像。但点击后旋转时间应该回到自动旋转。这就是计划。

谢谢你,Prusse,现在是睡觉时间,明天我会尽力掌握你的答案;)

4

1 回答 1

0

您不需要 eval,只需执行document.RotatingImage1.src = RotatingImage1_Images[RotatingImage1_Index][0].

发生所描述的行为是因为有不止一个计时器触发。第一次RotatingImage1ShowNext调用时有一组,每次从您的 onclick 处理程序调用时都会有一组。要解决此问题,请为您的计时器声明一个全局,并在设置另一个超时之前将其清除(如果已设置)。喜欢:

var global_timerid;
function RotatingImage1ShowNext(){
  //RotatingImage1_Index = RotatingImage1_Index + 1;
  //if (RotatingImage1_Index > 14) RotatingImage1_Index = 0;
  RotatingImage1_Index = (RotatingImage1_Index + 1) % RotatingImage1_Images.length;
  //document.RotatingImage1.src = RotatingImage1_Images[RotatingImage1_Index][0];
  document.getElementById('ban_img1').src = RotatingImage1_Images[RotatingImage1_Index][0];
  if (global_timerid) clearTimeout(global_timerid);
  global_timerid = setTimeout(RotatingImage1ShowNext, 4000);
}
于 2011-07-05T17:05:53.320 回答