不同暂停
问题描述:
显示阵列话我有一个JavaScript数组:不同暂停
["joe", "james", "jane", "jim", "jack", "ADAM", "jill", "jake", "John", "joel", "jeff", "CHARLES"]
的想法是为500ms的第二显示所有的小写名称然后与下一个小写的名称(也为500毫秒)替换。当我得到大写字母的名字时,我希望它保持5000ms。理想情况下,存在5个小写字母和1个大写字母的模式。
答
如果你必须:
//<![CDATA[
var pre = onload, doc, bod, E, weirdWait; // for use on other loads
onload = function(){
if(pre)pre(); // use different var name to hold more loads on other pages
doc = document; bod = doc.body;
E = function(id){
return doc.getElementById(id); // hope you learned something here
}
weirdWait = function(displayDiv, yourArray, timerDiv){
var i = 0;
displayDiv.innerHTML = yourArray[i];
if(timerDiv)timerDiv.innerHTML = new Date().toString();
function recurse(){
var si = setInterval(function(){
i++;
if(!yourArray.hasOwnProperty(i))i = 0;
var val = yourArray[i];
displayDiv.innerHTML = val;
if(timerDiv)timerDiv.innerHTML = new Date().toString();
if(val.match(/^[A-Z]/)){
clearInterval(si); setTimeout(recurse, 4500);
}
}, 500);
}
recurse();
}
var yourArray = ['joe', 'james', 'jane', 'jim', 'jack', 'ADAM', 'jill', 'jake', 'John', 'joel', 'jeff', 'CHARLES'];
weirdWait(E('output'), yourArray, E('timer'));
}
//]]>
html,body{
padding:0; margin:0;
}
.main{
width:940px; background:#000; color:#fff; padding:20px; margin:0 auto;
}
#output{
font:bold 64px Arial, Helvetica, sans-serif;
}
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta http-equiv='content-type' content='text/html;charset=utf-8' />
<meta name='viewport' content='width=device-width' />
<title>weird wait</title>
<link type='text/css' rel='stylesheet' href='external.css' />
<script type='text/javascript' src='external.js'></script>
</head>
<body>
<div class='main'>
<div id='output'></div>
<div id='timer'></div>
</div>
</body>
</html>
+0
谢谢!这有所帮助 –
答
我真的不知道Javascript支持,但是这里的一些C#中,你应该能够通过查看它
我假设“约翰”转换被认为是“约翰”
for (int i = 0; i < NameArray.Length; i++)
{
if (NameArray[i] == NameArray[i].ToLower()) //Javascript equivalent would be .toLowerCase()
{
Console.WriteLine(NameArray[i]);
System.Threading.Thread.Sleep(500); //Javascript equivalent would be wait(500)
}
else if (NameArray[i] == NameArray[i].ToUpper()) //Javascript equivalent would be .toUpperCase()
{
Console.WriteLine(NameArray[i]);
System.Threading.Thread.Sleep(5000); //Javascript equivalent would be wait(5000)
}
}
答
尝试了这一点:
const array = ["joe", "james", "jane", "jim", "jack", "ADAM", "jill", "jake", "JOHN", "joel", "jeff", "CHARLES"];
function recursiveStaggeredLoop (arr, i) {
while (i < array.length) {
if (array[i] === array[i].toLowerCase()) {
console.log(array[i]);
i++
return setTimeout(() => {
return recursiveStaggeredLoop(array, i);
}, 500)
}
else if (array[i] === array[i].toUpperCase()) {
console.log(array[i])
i++
return setTimeout(() => {
return recursiveStaggeredLoop(array, i)
}, 5000)
}
}
console.log('all done')
}
recursiveStaggeredLoop(array, 0)
我只是在这里使用一个简单的while
循环和递归,完成工作。
一个简单的说明,它只适用于严格小写或大写的名字。你的原始数组有一个“约翰”,这将打破这个代码。但是这应该足以让你开始。
答
const names = ["joe", "james", "jane", "jim", "jack", "ADAM", "jill", "jake", "John", "joel", "jeff", "CHARLES"];
const displayName = (index, max) => {
if (max === index) {
return;
}
// set your html to the name
const timeout = names[index] === names[index].toUpperCase() ? 5000 : 500;
setTimeout(displayName(index + 1, max), timeout);
}
displayName(0, names.length);
生病离开搞清楚如何把它显示给你,那里有很多方法可以做到这一点,如设置一个div的innerHTML 。
'这个想法是'...以及SO的想法是显示一些代码,你有一个问题...看到[如何问](https://stackoverflow.com/help/how-问) –