2013-04-10 103 views
0

OK,这里是东西,我写了一个幻灯片一个简单的代码,它的工作原理,它是如我所料,这就是它:是这么想的工作,一个简单的JavaScript代码@ _ @

var slideShowImage = document.getElementById("slideShowImage"); 
var images = ["_Images/Image_01.jpg","_Images/Image_02.jpg","_Images/Image_03.jpg","_Images/Image_04.jpg","_Images/Image_05.jpg","_Images/Image_06.jpg","_Images/Image_07.jpg"]; 
var imageIndex = 0; 

function changeImage(){ 
    slideShowImage.setAttribute ("src",images[imageIndex]); 
    imageIndex++; 
    if (imageIndex >= images.length){ 
      imageIndex = 0; 
     } 
    } 

setInterval (changeImage,3000); 

但是当我还在学习javaScript时,我想改变逻辑来品尝自己,并且我重写了代码,但它不起作用,我不知道为什么...... 希望有人能够启发我,的...

var imageId = document.getElementById("slideShowImage"); 
var imageNumber = 1; 
var imageName = "_Images/Image_0"+imageNumber+".jpg"; 

function changeImage(){ 
    imageId.setAttribute("Src",imageName); 
    imageNumber++; 
    if (imageNumber==7){ 
     imageNumber=1; 
     } 
    } 
setInterval(changeImage,1000); 
+1

你添加了这个事件吗?我的意思是把它们包装在一个函数中,然后在window.onload上注册它。 – 2013-04-10 09:35:46

回答

2

在第二种方法中,根据您需要重新计算此变量值的第一个答案,将var imageName分配给静态值,即“_Images/Image_0”+ imageNumber +“。jpg”。

相反,你可以写imageName作为函数返回计算值

var imageName = function(){ return "_Images/Image_0"+imageNumber+".jpg"; } 

,并调用内部changeImage

function changeImage(){ 
    imageId.setAttribute("Src",imageName()); 
    imageNumber++; 
    if (imageNumber==7){ 
     imageNumber=1; 
     } 
    } 
+0

真棒!它的工作原理,第一次了解静态thingy:P 虽然你为什么使用var名称后的括号? – 2013-04-10 09:59:10

+0

这是复制粘贴问题,删除它。 – 2013-04-10 10:02:26

+0

非常感谢您的帮助!我发现你在var name()后面使用了两个圆括号:imageId.setAttribute(“Src”,imageName()); – 2013-04-10 11:35:25

0
var imageName = "_Images/Image_0"+imageNumber+".jpg"; 

ÿ每次更改号码时需要更新imageName。否则,该字符串将固定为Image_01.jpg。

0

您的imageName变量永远不会被更新。您必须在每次chageImage调用时更新它。

var imageId = document.getElementById("slideShowImage"); 
var imageNumber = 1; 
var imageName = "_Images/Image_0"+imageNumber+".jpg"; 

function changeImage(){ 
    imageNumber++; 
    imageName = "_Images/Image_0"+imageNumber+".jpg"; 
    imageId.setAttribute("Src",imageName); 
    if (imageNumber==7){ 
     imageNumber=1; 
    } 
} 
setInterval(changeImage,1000); 
0

您所犯的错误是您的版本中的图像名称不会在每次迭代中评估一次。

var imageId = document.getElementById("slideShowImage"); 
var imageNumber = 1; 
setInterval(function() { 
    imageId.setAttribute("src","_Images/Image_0"+imageNumber+"jpg"); 
    imageNumber++; 
    if (imageNumber == 7) imageNumber = 1; 
},1000); 

这将导致您的代码实际工作。我采用了图像路径并将其引入到函数中,以便在每次迭代中对其进行评估,这是主要的错误。

请注意,您的图片不会立即加载;将它们设置为每个转换1秒是不明智的。在实践中,你想要将它们全部预加载在背景中的某个不可见的地方,这保证了即时调用。

0

可以replase代码 imageId.setAttribute( “源”,imageName) ; with follwoing imageId.src = imageName;

相关问题