我认为我非常接近让它正常工作,但仍然无法弄清楚我的代码有什么问题。我需要无休止地运行一个函数,通过一系列13或15个不同的图像随机交换图像src,具体取决于它们的大小。这个功能正在运行,但只有一次,它没有按照我的计划无休止地运行,没有得到“太多的递归”浏览器错误。这是代码:
function SwitchImageLoop(image, imageSize){
if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};
image = document.getElementById(image);
var randomTimer = Math.floor(Math.random() * 3000) + 1000;
FadeImages(image, imageSize, randomNumber);
var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
}
function FadeImages(image, imageSize, randomNumber){
$(image).fadeOut(300, function(){
$(image).attr('src', '/halcyonic/images/collage_' + imageSize + '_' + randomNumber + '.jpg').bind('onreadystatechange load', function(){
if(image.complete) $(image).fadeIn(300);
});
});
}
答案 0 :(得分:3)
问题是当你在setTimeout函数中调用SwitchImageLoop时。您的SwitchImageLoop接受第一个参数作为字符串(id),但下次在setTimeout中调用您的函数时,您将文档对象作为第一个参数传递。
function SwitchImageLoop(image, imageSize){
if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};
在下一次调用document.getElementById(documentObject)时会给你错误
image = document.getElementById(image);
var randomTimer = Math.floor(Math.random() * 3000) + 1000;
FadeImages(image, imageSize, randomNumber);
var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
}
将您的功能重写为
function SwitchImageLoop(image, imageSize){
if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};
var randomTimer = Math.floor(Math.random() * 3000) + 1000;
FadeImages(image, imageSize, randomNumber);
var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
}
function FadeImages(image, imageSize, randomNumber){
image=document.getElementById(image);
$(image).fadeOut(300, function(){
$(image).attr('src', '/halcyonic/images/collage_' + imageSize + '_' + randomNumber + '.jpg').bind('onreadystatechange load', function(){
if(image.complete) $(image).fadeIn(300);
});
});
}
答案 1 :(得分:1)
当SwitchImageLoop
是一个字符串时,我可以看到image
第一次如何工作。但是,第二次,您将DOM元素传递给它。我想知道document.getElementById
返回的是什么。我建议你删除行
image = document.getElementById(image);
并在适当的地方使用$("#" + image)
代替$(图片)。
答案 2 :(得分:0)
想想你的错误,“太多递归”。
你的功能正在呼唤自己。每次它调用自己它会使用更多的内存。递归深度上限,以便您不会崩溃计算机。您可能希望使用while循环而不是递归来进行无限循环。