无法让我的单词随机化器脚本正确循环

Can't get my word randomizer script to loop properly

我正在尝试将此脚本添加到 运行,而不是以 Awesome 一词结尾。然后循环 again/repeat.

这是 JS

var i, word, rnd, words, fadeSpeed, timer;

words = ['respected​.', 'essential.', 'tactical.', 'effortless.', 'credible.', 'smart.', 'engaging.', 'focused.', 'effective.', 'clear.', 'relevant.', 'strategic.', 'trusted.', 'compelling.', 'admired.', 'inspiring.', 'cogent.', 'impactful.', 'valued.'];

fadeSpeed = 500;
timer = 2000;

for (i = 0; i < 20; i++) {
    if (i === 19) {
        word = 'awesome.';
        rnd = Math.floor(Math.random() * words.length);
        word = words[rnd];
        words.splice(rnd, 1);
    } else {
        rnd = Math.floor(Math.random() * words.length);
        word = words[rnd];
        words.splice(rnd, 1);
    }

    (function(word) {
        $('h1.random em').fadeOut(fadeSpeed, function() {
                $(this).html(word);
            })
            .slideDown('slow')
            .delay(timer)
            .fadeIn(fadeSpeed);
    })(word);
}

这是开发站点的link。

http://dev-pivot-website.pantheon.io/#

if(i===19)

案例,你正在设置

word= 'awesome.';

然后在不使用的情况下迅速覆盖它:

word= words[rnd];

删除最后一行(以及它上面的 rnd= 行,它们将变得多余)。

为了让这个连续循环,看到你每次都从数组中删除(大概这样你就不会在每个序列中得到重复项)你需要做一些事情

  1. 用无限循环 (while(true)) 代替固定循环 (for(;;))
  2. 当您到达 awesome.
  3. 时,用原始单词列表重新填充数组

这是实现此目的的一种方法 - 我只有 C/P 数组,但还有一种更聪明的方法 - 我会留给你想象。

var i, word, rnd, words, fadeSpeed, timer;

words = ['respected​.', 'essential.', 'tactical.', 'effortless.', 'credible.', 'smart.', 'engaging.', 'focused.', 'effective.', 'clear.', 'relevant.', 'strategic.', 'trusted.', 'compelling.', 'admired.', 'inspiring.', 'cogent.', 'impactful.', 'valued.'];

fadeSpeed = 500;
timer = 2000;

while(true){
  var word;
  if(words.length == 0){
      word = "awesome.";  
      words = ['respected​.', 'essential.', 'tactical.', 'effortless.', 'credible.', 'smart.', 'engaging.', 'focused.', 'effective.', 'clear.', 'relevant.', 'strategic.', 'trusted.', 'compelling.', 'admired.', 'inspiring.', 'cogent.', 'impactful.', 'valued.'];
  }
  else{
    rnd = Math.floor(Math.random() * words.length);
    word = words[rnd];
    words.splice(rnd, 1);
  }
  (function(word) {
        $('h1.random em').fadeOut(fadeSpeed, function() {
                $(this).html(word);
            })
            .slideDown('slow')
            .delay(timer)
            .fadeIn(fadeSpeed);
    })(word);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 class="random"><em></em></h1>

Splice 将从您的数组中删除单词。

words.splice(rnd, 1);  

在第 20 个元素之后,没有什么可以迭代了。

正如@Jamiec 所说,您将需要一个连续的循环。你也可以使用 setTimeout();连续循环(应该比 while(true) 更轻 CPU )

尝试这样的事情(@jamiec 的答案略有修改)

   var i, word, rnd, words, fadeSpeed, timer;

function getWords(){
var words = ['respected​.', 'essential.', 'tactical.', 'effortless.', 'credible.', 'smart.', 'engaging.', 'focused.', 'effective.', 'clear.', 'relevant.', 'strategic.', 'trusted.', 'compelling.', 'admired.', 'inspiring.', 'cogent.', 'impactful.', 'valued.'];
    return words;
}

words = getWords();
fadeSpeed = 500;
timer = 2000;

displayWords();



function displayWords(){
  var word;
  if(words.length == 0){
      word = "awesome.";  
      words = getWords();      
  }
  else{
    rnd = Math.floor(Math.random() * words.length);
    word = words[rnd];
    words.splice(rnd, 1);
  }

  (function(word) {
        $('h1.random em').fadeOut(fadeSpeed, function() {
                $(this).html(word);
            })
            .slideDown('slow')
            .delay(timer)
            .fadeIn(fadeSpeed);
    })(word);

    setTimeout(displayWords,1000);
}

Fiddle : http://jsfiddle.net/198ke25u/3/