无法使用我的单词randomizer脚本正确循环

时间:2015-02-05 17:11:14

标签: javascript random words

我正在尝试让这个脚本运行,而不是以Awesome这个词结束。然后再循环/重复。

这是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);
}

这是开发站点的链接。

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

3 个答案:

答案 0 :(得分:0)

if(i===19)

情况,您正在设置

word= 'awesome.';

然后在不使用它的情况下立即书写:

word= words[rnd];

删除最后一行(及其上方的rnd =行,然后将变为多余的)。

答案 1 :(得分:0)

为了让这个连续循环,看到你每次从数组中删除(可能是因为你不会在每个序列中得到重复),你需要做一些事情

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

    这是实现这一目标的一种方法 - 我只有C / P阵列,但有一种更聪明的方法可以做到这一点 - 我会留给你想象。

    &#13;
    &#13;
    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);
    }
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <h1 class="random"><em></em></h1>
    &#13;
    &#13;
    &#13;

答案 2 :(得分:0)

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

words.splice(rnd, 1);  

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

正如@Jamiec所说,你需要一个连续循环。你也可以使用setTimeout();连续循环(应该减少CPU重量而不是while(true))

尝试这样的事情(@ 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);
}

小提琴:http://jsfiddle.net/198ke25u/3/