无法让我的单词随机化器脚本正确循环
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。
在
if(i===19)
案例,你正在设置
word= 'awesome.';
然后在不使用的情况下迅速覆盖它:
word= words[rnd];
删除最后一行(以及它上面的 rnd= 行,它们将变得多余)。
为了让这个连续循环,看到你每次都从数组中删除(大概这样你就不会在每个序列中得到重复项)你需要做一些事情
- 用无限循环 (
while(true)
) 代替固定循环 (for(;;)
)
- 当您到达
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>
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/
我正在尝试将此脚本添加到 运行,而不是以 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。
在
if(i===19)
案例,你正在设置
word= 'awesome.';
然后在不使用的情况下迅速覆盖它:
word= words[rnd];
删除最后一行(以及它上面的 rnd= 行,它们将变得多余)。
为了让这个连续循环,看到你每次都从数组中删除(大概这样你就不会在每个序列中得到重复项)你需要做一些事情
- 用无限循环 (
while(true)
) 代替固定循环 (for(;;)
) - 当您到达
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>
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/