代码之家  ›  专栏  ›  技术社区  ›  Aaron

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

  •  1
  • Aaron  · 技术社区  · 9 年前

    我想让这个脚本运行起来,而不是以“真棒”结束。然后再次循环/重复。

    这是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 回复  |  直到 9 年前
        1
  •  0
  •   Amitd    9 年前

    拼接将从阵列中删除单词。

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

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

        2
  •  0
  •   Mark Smith    9 年前

    if(i===19)
    

    case,你在设置

    word= 'awesome.';
    

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

    word= words[rnd];
    

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

        3
  •  0
  •   Jamiec    9 年前

    为了实现这种连续循环,考虑到每次都要从阵列中删除(大概是为了避免在每个序列中重复),您需要做一些事情

    1. 有一个无尽的循环( while(true) )代替固定回路( for(;;) )
    2. 当您到达 awesome.

    这里有一种实现这一点的方法——我只对阵列进行了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>