我刚刚开始研究 javascript,所以希望这会是简单的事情。我想制作自动播放的图像幻灯片。这非常简单,并且有一些关于它的教程,但由于某种原因我无法让它工作。这就是我所拥有的:
var image1 = new Image();
var image2 = new Image();
var image3 = new Image();
image1.src = "images/website6.jpg";
image2.src = "images/website7.jpg";
image3.src = "images/sunset.jpg";
var images = new Array(
"images/website6.jpg",
"images/website7.jpg",
"images/sunset.jpg"
);
setTimeout("delay(images,0)",2000);
function delay(arr,num){
document.slide.src = arr[num % 3];
var number = num + 1;
setTimeout("delay(arr,number)",1000);
}
我试图更改的图像有 id 幻灯片。我也有一些证据表明它有效。发生的事情是加载第一个图像。然后加载第二个图像(这意味着原始的 setTimeout 调用必须有效)。然后什么也没有发生。对我来说这表明递归不起作用。
我对其他语言中的递归非常熟悉,所以我认为这一定只是语法问题或其他问题,但我似乎无法弄清楚。谢谢你的帮助。
问题是,当您传入要评估的字符串时setTimeout
调用时,评估将在全局上下文中完成(稍后,当需要触发时)。因此,您最好(出于许多其他原因)传递实际函数:
setTimeout(function() { delay(images, 0); }, 2000);
function delay(arr, num) {
document.slide.src = arr[num % 3];
setTimeout(function() { delay(arr, num + 1); }, 1000);
}
In more 现代浏览器 https://caniuse.com/#feat=es5,您可以使用.bind()
函数的方法来创建一个预先绑定到要用作的东西的函数this
:
setTimeout(delay.bind({arr: images, num: 0}), 2000);
function delay() {
document.slide.src = this.arr[this.num % 3];
setTimeout(delay.bind({arr: this.arr, num: this.num + 1}), 1000);
}
一个是六个,另一个是六个,但只是作为一个例子,表明有多种方法可以做事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)