JavaScript 图像旋转

标签 javascript arrays function

我希望这个问题适合 Stack Overflow。我在网上查了很多书,但找不到这个问题的答案。

我想使用一些我遇到过的 JavaScript(见下文)。我已经在网页中设置了脚本并且运行良好......但是,作为一个经验丰富的程序员,我不明白它到底是如何工作的。我做了一些研究,但仍然无法破解代码中的几个部分。

我知道它创建了一个数组 - 但这是一个多维数组吗?

另外,我不明白为什么setTimeout函数中'active'要写成("+active+")(加号??):

setTimeout("image_rotate("+active+")", 5000);

为什么加号位于单词 active 的两端?另外,active 不应该是一个数字吗?

谢谢。

 <script type="text/javascript">

 var the_images = [];

 window.onload = function(){

 the_images.push(["http://www.adobe.com", "images/banner_1.jpg",      "Adobe"]);
 the_images.push(["http://www.microsoft.com", "images/banner_2.jpg", "Microsoft"]);
 the_images.push(["http://www.mozilla.org", "images/banner_3.jpg", "Mozilla"]);

 image_rotate(0);
 }

 function image_rotate(active){

 var image_container = document.getElementById("ad");


 image_container.innerHTML = "<a href=\""+the_images[active][0]+"\"><img    src=\""+the_images[active][1]+"\" alt=\""+the_images[active][2]+"\"   title=\""+the_images[active][2]+"\" /></a>";

 active++;

 if(active >= the_images.length){
 active = 0;
 }

 setTimeout("image_rotate("+active+")", 5000);

 }
 </script>

最佳答案

在开始修改代码之前,您可能应该尝试阅读一些有关 JavaScript 的教程。这是 JavaScript 名声不佳的原因之一。它实际上是一种非常深刻和复杂的语言,人们只是“剪切和粘贴”功能就造成了很多负面印象。

也就是说,我会帮助您解决问题,希望您能更好地理解这段代码。

是的,正在这一行创建一个数组(不,它不是多维的):

var the_images = [];

var 表示“我要声明一个变量”,the_images 是数组的名称,[] 是称为数组文字或数组初始值设定项。它将 the_images 初始化为一个空数组。 (例如,如果您改为编写 var the_images = [1,'hello',false];,它将使用三个元素(数字、字符串和 bool 值)对其进行初始化。)

数组有一个名为 push 的函数,它将元素添加到数组的末尾。因此,您将看到您在以下几行中向数组添加了元素:

the_images.push(["http://www.adobe.com", "images/banner_1.jpg", "Adobe"]);
the_images.push(["http://www.microsoft.com", "images/banner_2.jpg", "Microsoft"]);
the_images.push(["http://www.mozilla.org", "images/banner_3.jpg", "Mozilla"]);

请注意,您正在将数组添加到数组中,这可能是您印象中这些数组是多维的(数组的数组在技术上与多维数组不同)。

最后,这一行:

setTimeout("image_rotate("+active+")", 5000);

setTimeout 是一个本质上推迟某些内容以供将来执行的函数。从本质上讲,这就是说“在 5000 毫秒(5 秒)内调用函数 image_roate”。我想指出,强烈建议不要使用 setTimeout(将代码指定为字符串)。

active 是一个变量,是的,它恰好存储了一个数字。第一次迭代时,它是 0,第二次迭代时,它是 1,依此类推。在这种情况下,您想知道的加号正在执行字符串连接。因此,第一次调用 setTimeout 时,它会被调用:

"image_rotate("+active+")"  =>   "image_rotate("+0+")"   =>  "image_rotate(0)"

第二次

"image_rotate("+active+")"  =>   "image_rotate("+1+")"   =>  "image_rotate(1)"

如果您想查看发生了什么,可以将该值打印到控制台。更改此行:

setTimeout("image_rotate("+active+")", 5000);

对此:

var debugString = "image_rotate("+active+")";
setTimeout( debugString );
console.log( debugString );

然后,如果您检查控制台(Windows 上为 Ctrl-Shift-J,OSX 上为 Ctrl-Option-J),您将看到程序的输出,希望能够阐明发生了什么情况。

关于JavaScript 图像旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18455235/

相关文章:

javascript - 如何在浏览器中使用 Google 编译器而不请求服务?

c++ - 在 C++ 中使用外部文件创建数组

php - str_replace 数组

javascript - 将*所有* javascript 变量(甚至未定义)作为函数参数传递的优缺点是什么?

javascript - 为什么事件在 Firefox 中未定义?

javascript - js 正则表达式清理除数字之外的所有内容

javascript - 在 HTML(5) 文本输入中屏蔽字符的最简单方法

c# - 我可以在表格中一次显示一行吗?

java - 使用 JButtons 清除 JTextFields

javascript - (JavaScript) 在其他函数的回调中执行函数