Javascript随机图像+;后退按钮

Javascript随机图像+;后退按钮,javascript,Javascript,我正在尝试创建一个站点,它从一个数组中随机选择一张照片,然后用户可以使用箭头键按next并加载另一张随机图像,如果他们按back,它将加载上一张图像。我有所有这些工作: 唯一的问题是,当我按下数组长度的下一个#of times=时,我得到一个错误,表示超过了最大调用堆栈大小 我怎么修理 代码: var rand=imagesArray[Math.floor(Math.random()*imagesArray.length)]; var theImg=document.getElementByI

我正在尝试创建一个站点,它从一个数组中随机选择一张照片,然后用户可以使用箭头键按next并加载另一张随机图像,如果他们按back,它将加载上一张图像。我有所有这些工作:

唯一的问题是,当我按下数组长度的下一个#of times=时,我得到一个错误,表示超过了最大调用堆栈大小

我怎么修理

代码:

var rand=imagesArray[Math.floor(Math.random()*imagesArray.length)];
var theImg=document.getElementById('gif');
theImg.src=rand;
高度=700;
theImg.width=1920;
var usedImages={};
var usedimagesunt=0;
var numHistory=[];
函数displayPreviousImage(){
如果(numHistory.length>1){
numHistory.pop();
var num=numHistory[numHistory.length-1];
document.canvas.src=imagesArray[num];
}
}
函数displayNextImage(){
var num=Math.floor(Math.random()*(imagesArray.length));
如果(!usedImages[num]){
numHistory.push(num);
document.canvas.src=imagesArray[num];
usedImages[num]=true;
如果(UseDimageScont==imagesArray.length){
UseDimageScont=0;
num=0;
usedImages={};
控制台日志(“完成”)
}
}否则{
displayNextImage();
}

}
usedImages
在数组中具有所有可能的索引时,函数将进行无限循环。还有一个更容易的解决方案是,首先让用户洗牌图像数组,然后让用户按新的顺序从0-n浏览它。这样,您仍然可以随机提供图像,但无需跟踪使用过的图像

function shuffle(array) {
  var m = array.length, t, i;

  // While there remain elements to shuffle…
  while (m) {

    // Pick a remaining element…
    i = Math.floor(Math.random() * m--);

    // And swap it with the current element.
    t = array[m];
    array[m] = array[i];
    array[i] = t;
  }

 return array;
}

您似乎在任何地方都没有递增
usedimagesont
,因此重置已使用图像跟踪的代码块的条件永远不会运行,结果是无限递归
displayNextImage()