我正在尝试制作一个使用JavaScript循环显示3张图片的横幅 在更改之前,每张图像应显示10秒钟。
我写了一些代码,但它没有用。它一直停留在第一张图像上。图像不会像我想要的那样改变。
您能在代码中看到任何内容并指出我的错误吗?
代码如下:
<script type="text/javascript">
function changeBanner(){
var img = new array
img[0] = document.images[0].src
img[1] = document.images[1].src
img[2] = document.images[2].src
var currentimg = img[0]
if(currentimg == img[0]) {
currentimg = img[1]
}
if(currentimg == img[1]) {
currentimg = img[2]
}
}
</script>
HTML如下:
<body onload="var start=setInterval('changeBanner()', 10000;">
<div id="wrapper">
<div>
<img src="budda.JPG" width="900px" height="300px" />
</div>
...
答案 0 :(得分:5)
var index = 0;
function changeBanner() {
[].forEach.call(document.images, function(v, i) {
document.images[i].hidden = i !== index
});
index = (index + 1) % document.images.length;
}
window.onload = function() {
setInterval(changeBanner, 1000)
};
答案 1 :(得分:1)
function changeBanner(){
var img = new array
img[0] = document.images[0].src
img[1] = document.images[1].src
img[2] = document.images[2].src
var currentimg = img[0]
现在currentimg
是img[0]
if(currentimg == img[0]) {
这是真的 currentimg = img [1] }
现在currentImg
的值为img[1]
if(currentimg == img[1]) {
这也是正确的
currentimg = img[2]
}
currentImg
的值为img[2]
}
现在让我们离开currentImg
你需要1)理清逻辑2)将某个DOM对象设置为这个新值。
答案 2 :(得分:1)
您的代码有几个功能问题:
无论修复如何,您都可以使代码更清晰,从body标签中删除内联脚本,并通过使用索引来跟踪集合中的当前图像来修复if语句问题。
假设您拥有与您相同的HTML,其中3张图片均以hidden
开头:
<body>
<div id="wrapper">
<div>
<img src="http://placehold.it/100x150" width="300px" height="150px" hidden />
<img src="http://placehold.it/200x250" width="300px" height="150px" hidden />
<img src="http://placehold.it/300x350" width="300px" height="150px" hidden />
</div>
</div>
</body>
您无需使用onload
的{{1}}属性。
使用body
代替您可以分配一个在window.onload
事件之后自动调用的函数,该函数在DOM准备好并且所有图像都已加载之后。
最好将所有脚本代码放在单独的load
文件中,并且只在HTML中包含对它的引用。但是,为了简单起见,我确实接近你当前的方法。
在该函数中,您可以设置变量然后开始间隔,类似于:
.js
DEMO - 修复逻辑问题并使用<script type="text/javascript">
var currentImageIndex = -1,
maxImageIndex = 0,
images = [],
changeInterval = 1500;
// prepares relevant variables to cycle throguh images
var setUp = function() {
images = document.images;
maxImageIndex = images.length;
currentImageIndex = 0;
};
// changes the banner currently being displayed
var changeBanner = function() {
var i;
// either re-set the index to 0 if the max length was reached or increase the index by 1
currentImageIndex = (currentImageIndex >= maxImageIndex - 1) ? 0 : currentImageIndex += 1;
for (i = 0; i < maxImageIndex; i += 1) {
images[i].hidden = (i !== currentImageIndex);
}
};
// a function which is triggered following the `load` event
window.onload = function() {
setUp();
images[currentImageIndex].hidden = false; // show the first banner image;
setInterval(changeBanner, changeInterval); // following a delay, keep changing the banner image by the specified interval
};
</script>
答案 3 :(得分:0)
在控制台中查看此内容;)
var imgs=document.images;
function changeBanner(){
var firstImgSrc = imgs[0].src + "";
for(var i=0;i<imgs.length-1;i++){
imgs[i].src=imgs[i+1].src+"";
}
imgs[imgs.length-1].src=firstImgSrc; //replace last image src with first one
}
var interval = setInterval(changeBanner, 5000);
答案 4 :(得分:0)
代码中的setInterval('changeBanner()', 10000;
未正确关闭,10000之后缺少“)”。应该是:
setInterval('changeBanner()', 10000);
此外,只有在加载正文时才会调用setInterval函数。所以只需在JavaScript文件中添加该函数,并将其链接到html。像这样:
<script type="text/javascript">
function changeBanner(){
var img = new array
img[0] = document.images[0].src
img[1] = document.images[1].src
img[2] = document.images[2].src
var currentimg = img[0]
if(currentimg == img[0]) {
currentimg = img[1]
}
if(currentimg == img[1]) {
currentimg = img[2]
}
}
setInterval('changeBanner()', 10000);
</script>