一直在搜索谷歌得到了大量的结果,但不是我能成功实施。
我使用javascriptkit中的这些代码来显示数组中的随机图像。
<script language="JavaScript">
<!--
function random_imglink(){
var myimages=new Array()
myimages[1]="image1.gif"
myimages[2]="image2.gif"
myimages[3]="image3.gif"
myimages[4]="image4.gif"
myimages[5]="image5.gif"
myimages[6]="image6.gif"
var ry=Math.floor(Math.random()*myimages.length)
if (ry==0)
ry=1
document.write('<img src="'+myimages[ry]+'" border=0>')
}
random_imglink()
//-->
</script>
该脚本运行良好,但有时图像重复(例如img6.gif - &gt; img4.gif - &gt; img4.gif),希望图像显示不会与前一个图像重复。
我对javascript和编程不是很熟悉,这是我第一次玩这个,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
一般答案:我认为随机函数的工作方式使得您无法跳过重复图像,除非您从阵列中删除了您使用的图像。因此,一个想法可能是使您的数组成为函数之外的全局变量,并删除您已使用的图像。然后在主函数中,如果删除后数组的大小为零,则可以使用原始图像集重新加载数组。只是一个想法,如果你遇到麻烦就试一试:)
答案 1 :(得分:0)
您可以创建一个数组,您可以在其中存储已使用过的ID。 然后你需要找到不在这个数组中的随机id。
这里有示例代码:
var usedIds = [];
...
var ry = 0;
if(userIds.length != myimages.length) {
// If we haven't used all the images
do {
ry = Math.floor(Math.random()*myimages.length);
} while (usedIds.indexOf(ry) > -1);
// here we have new randomized and unique image id
usedIds.push(ry);
// do something with new id
} else {
// we have already used all the images
}
答案 2 :(得分:0)
var intervalID;
var showed = {};
var loopCount = 0;
function random_imglink(){
var myimages=new Array()
myimages[1]="image1.gif"
myimages[2]="image2.gif"
myimages[3]="image3.gif"
myimages[4]="image4.gif"
myimages[5]="image5.gif"
myimages[6]="image6.gif"
var ry=Math.floor(Math.random()*myimages.length);
if (ry===0) ry=1;
var src = myimages[ry]
document.body.innerHTML+=('<br>' + Object.keys(showed).length + '/' + myimages.length);
// if all images showed
if( Object.keys(showed).length === myimages.length - 1 ){
// |___|
// ^
// |
// this is what i modified -----------------------+
//we reset the showed cache
showed = {};
// we increment the loopCount
loopCount = loopCount + 1;
if(loopCount === 3 ){
clearInterval( intervalID );
return;
}
document.body.innerHTML+=('<hr>incremting loopCount<hr>');
}
// if this src have been showed we random_imglink;
if( showed[src] ) return random_imglink();
document.body.innerHTML+=('<br>img src="'+myimages[ry]+'" border=0>');
//we store the showed img
showed[src] = true;
}
document.body.innerHTML+=('we start : <br>');
intervalID = setInterval( random_imglink , 500)
&#13;
我不知道你的约束,但如果你拥有代码,你可以像你想要/需要一样修改它, 一旦你明白上面的方式不是更优化,也许你应该考虑下面这个版本!
var id;
var i = 0;
var loopCount = 0;
var myimages=[];
// we want a clone array of your myimages[]
// because we want modify it, and keep safe the original.
// it will be copied later
var clonedImages ;
myimages.push("image1.gif");
myimages.push("image2.gif");
myimages.push("image3.gif");
myimages.push("image4.gif");
myimages.push("image5.gif");
myimages.push("image6.gif");
// ^
// |
// Don't have to worry about images index
// Just push in the array in the order you need.
function ran_link(){
// if we have no clone or clone is empty
// we create it
if(! clonedImages || ! clonedImages.length ){
if(loopCount >= 3) {
clearInterval(id);
return;
}
// we create a clone of myImages
clonedImages = myimages.slice(0 , myimages.length);
loopCount= loopCount + 1;
document.body.innerHTML+=('<br> loop : ' + loopCount);
i=0;
}
// We work here only with the existant element
// |
// V
var ry =Math.floor(Math.random() * clonedImages.length);
// we extract the element from the array
// so the array.length will be -1
var currentImage = clonedImages.splice(ry,1);
// currentImage is an array of 1 element
// we get the value at index 0
var currentImageURL = currentImage[0];
document.body.innerHTML+=('<br>' + (i++) + ' : ' + currentImageURL + ' <==> ' + ry);
return cur;
}
id = setInterval(ran_link , 500);
&#13;