Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-洗牌数组无法正常工作。需要帮助_Javascript_Arrays_Iframe_Shuffle - Fatal编程技术网

Javascript-洗牌数组无法正常工作。需要帮助

Javascript-洗牌数组无法正常工作。需要帮助,javascript,arrays,iframe,shuffle,Javascript,Arrays,Iframe,Shuffle,下面的洗牌功能无法正常工作。我有一个100多页的数组,需要洗牌,然后在iframe中显示一段时间。不知何故,它没有显示100多页的整个数组,但大约25页之后,它似乎又重新开始了。有人能帮忙吗?我需要确保整个阵列始终以完整的方式播放,并且始终以新的随机顺序播放,以便在每次访问页面时进行洗牌,并在播放整个阵列后进行洗牌 这是代码,有人能看到哪里出了问题吗 <script type="text/javascript"> var pages=new Array(); pages[0]="01

下面的洗牌功能无法正常工作。我有一个100多页的数组,需要洗牌,然后在iframe中显示一段时间。不知何故,它没有显示100多页的整个数组,但大约25页之后,它似乎又重新开始了。有人能帮忙吗?我需要确保整个阵列始终以完整的方式播放,并且始终以新的随机顺序播放,以便在每次访问页面时进行洗牌,并在播放整个阵列后进行洗牌

这是代码,有人能看到哪里出了问题吗

<script type="text/javascript">
var pages=new Array();
pages[0]="01.html";
pages[1]="02.html";
pages[2]="03.html";
....etc
pages[100] ="100.html";

 var shuffle = function(){
         var shuffledPages = [];

         /*The first time rand is used, it will not allow you to pick the last value used last time.*/
         var rand = Math.floor((pages.length - 1) * Math.random());

         while(pages.length > 0){
             shuffledPages.push( pages.splice( rand, 1)[0] );  
             rand = Math.floor(pages.length * Math.random());
         }

         return shuffledPages;
 }




var time=33000; 
var currentIndex = 0; 

function pageChange() { 
    if(currentIndex == pages.length - 1){ 
        pages = shuffle(); 
        currentIndex = 0; 
    } 
    else{ 
        currentIndex++; 
    } 

    document.getElementById("frame").src=pages[currentIndex]; 
    setTimeout("pageChange()",time); 
}

onload=pages = shuffle();
onload=pageChange;

</script>

<iframe id="frame" src="" width="1555px" height="872px" hspace="0" vspace="0" frameborder="2" scrolling="no" ></iframe><br />

编辑:工作代码:

var pages=[];
pages[0]="http://example.com/";
pages[1]="http://www.iana.org/domains/reserved";
pages[2]="http://en.wikipedia.org/wiki/Main_Page";
pages[3]="http://en.wikipedia.org/wiki/Randomness";

 var shuffle = function(array){
     var shuffledPages = [];
     while(array.length){
         shuffledPages.push(array.splice(Math.floor(array.length*Math.random()),1));
     }
     return shuffledPages;
}


var time = 3300; 
var currentIndex = 0; 

function pageChange() { 
    if(currentIndex == 0){ 
        pages = shuffle(pages); 
        console.log(pages);
        currentIndex = pages.length; 
    }
    currentIndex--; 
    document.getElementById("frame").src=pages[currentIndex]; 
    console.log(currentIndex);
    setTimeout(function() { pageChange(); }, time);
};

pageChange();

小提琴手:

使用此方法洗牌。我将如何在代码中实现这一点?我不知道如何结合洗牌和换页功能。谢谢。我用你的代码替换了我的洗牌部分,但是现在iframe中什么也没有发生。是的!在小提琴中,它工作得很好,但在我自己的代码中,我需要更改页面更改;到onload=页面更改;为了让它甚至开始,当它开始时,第一个页面总是一个错误/不存在的页面。从第二页看,它似乎在玩洗牌…我在小提琴中看到,它在每个数组中也捕捉到404。我清楚地看到错误404,我们真的很抱歉,但没有这样的页面。在第一个页面上加载,并且每下一次洗牌一次。我认为数学在数组零下一->引用页面[-1]之外创建了一个值,这个值不存在。它只是在你这边的一个无序循环中播放4页吗?现在呢?我发现第一个值总是4作为数组长度,所以这个版本应该可以工作。