2017-04-19 77 views
-1

该代码旨在以打字方式动画某些文本。我希望它只运行一次,但它始终在句子区域循环。我将如何去阻止它循环。代码的顶部收集输入的值并放入数组,这一切都很好。这只是循环我有问题。这个Javascript函数保持循环,我怎样才能让它运行一次?

var yourWord = document.getElementById("myText").value; 

var yourtext = "I took the word " + yourWord + "..."; 


var infomation = [yourtext, 
     'I looked at the most relevant news article relating to it...', 
     'And created this piece of art from the words in the article! ' 
    ], 

    part, 

    i = 0, 
    offset = 0, 
    pollyLen = Polly.length, 
    forwards = true, 
    skip_count = 0, 
    skip_delay = 5, 
    speed = 100; 

var wordflick = function() { 
    setInterval(function() { 
     if (forwards) { 
      if (offset >= infomation[i].length) { 
       ++skip_count; 
       if (skip_count == skip_delay) { 
        forwards = false; 
        skip_count = 0; 
       } 
      } 
     } else { 
      if (offset == 0) { 
       forwards = true; 
       i++; 
       offset = 0; 
       if (i >= pollyLen) { 
        i = 0; 
       } 
      } 
     } 
     part = infomation[i].substr(0, offset); 
     if (skip_count == 0) { 
      if (forwards) { 
       offset++; 
      } else { 
       offset--; 
      } 
     } 
     $('#pollyInfo').text(part); 
    }, speed); 
}; 

$(document).ready(function() { 
    wordflick(); 
}); 
+1

具体循环是什么?我的意思是,有setInterval,它重复,但这是它的重点。我没有看到任何其他循环。 –

+0

如果你不想让它循环,不要使用'setInterval()'。只需执行一次代码,然后在您想要再次执行时调用该函数。 – Barmar

+0

句子的数组保持循环。我想让它循环一遍,然后停下来。 –

回答

1

修改行:

setInterval(function() { 

成:

var interval = setInterval(function() { 

然后清除你在哪里设置时i = 0的时间间隔;

if (i >= pollyLen) { 
        i = 0; 
} 

到:

if (i >= pollyLen) { 
        i = 0; 
        clearInterval(interval); 
} 

这应该做的工作!

+0

谢谢,这工作。你一直非常有帮助 –

相关问题