2012-06-11 37 views
0

我在我的一个页面上实现图像旋转,但是我想重新使用另外两页上的代码。我还希望每个页面以不同的顺序将图像旋转到其他页面。我认为这是通过声明不同的数组并用唯一的ID来调用它们来实现的。JavaScript不工作在第二页

的代码如下

var ImageArr1 = new Array("/assets/function.jpg","assets/takeaway.jpg","/assets /delivery.jpg"); 
var ImageHolder1 = document.getElementById('Rotating1'); 


var ImageArr2 = new Array("/assets/takeaway.jpg","/assets/function.jpg","/assets/delivery.jpg"); 
var ImageHolder2 = document.getElementById('Rotating2'); 

    function RotateImages(whichHolder,Start) 
    { 
    var a = eval("ImageArr"+whichHolder); 
    var b = eval("ImageHolder"+whichHolder); 
    if(Start>=a.length) 
    Start=0; 
    b.src = a[Start]; 
    window.setTimeout("RotateImages("+whichHolder+","+(Start+1)+")",3000); 
    } 

    RotateImages(1,0); 
    RotateImages(2,0); 

而我的HTML如下: - 第1页

<img src="/assets/function.jpg" name="Rotating" id="Rotating1" width="260" height="180" alt=""> 

第2页

<img src="/assets/takeaway.jpg" name="Rotating" id="Rotating2" width="260" height="180" alt=""> 

我慢慢学习Javascript支持,但是这已经让我难倒

任何帮助表示赞赏

+0

忘记'eval'尽可能快! - >'window [“ImageArr”+ whichHolder]'是一样的。也传递'setTimeout'函数而不是字符串作为第一个参数 - >'setTimeout(function(){RotateImages(whichHolder,(Start + 1));},3000)' – Andreas

回答

1

您遇到的问题其实是一个错误。通过调用b.src,你声明b已被定义,但你的ImageHolder可能不在那里。尤其是通过调用RotateImage(第一页上的RotateImage(2 ...)或RotateImage(第二页上的第一个)...

您可能会尝试的第一件事是从您的大脑中删除eval。您可以简单地使用window [“ImageArr”+ whichHolder], 。这是好得多

接下来,

if(b) { 
    b.src = a[Start]; 
    window.setTimeout("RotateImages("+whichHolder+", "+(Start+1)+")", 3000); 
} 

下一页取代你的函数(最后两行)结束时,你可以学会叫的setTimeout与函数而不是字符串:

window.setTimeout(function() { 
    RotateImages(whichHolder, Start+1); 
}, 3000); 

最后,它是更多的代码约定,经典变量和函数没有大写的第一个字母。所以它可能是rotateImages并开始。

+0

感谢您的建议,但我仍然无法让它与您的建议 – Richlewis

+0

在这里,你可以找到一个工作的例子http://jsfiddle.net/dxGwy/7/ – korko

+1

大微笑四处。工作像一种享受。也感谢上面提供的评论,将帮助我学习JavaScript一点清洁 – Richlewis