这个问题在这里已有答案:
$(function() {
let testOne = 'test one.';
let testTwo = 'test two';
let messageBox = $('messagebox');
let a = ['test:', testOne,'test2:', testTwo];
let i = 1
setInterval(cool, 1000)
function cool() {
messageBox.text(a[1])
}
});
嗨,您好,
我是JS的新手。我期待在我的屏幕上显示定时器中的testOne
和testTwo
(将添加更多)。我得到了帮助,以实现这一目标。例如,我试图在一个时间循环中显示一个单词及其英文定义,在循环中旋转单词。 (有点像现场屏幕保护程序)
我错过了什么?
感谢您的时间,帮助和努力。
你有个好的开始。
<messagebox>
),否则请在选择器的开头使用#
来指示“messagebox”是一个ID。见jQuery's ID Selector。
$('#messagebox')
或者,使用一个类和class selector。
$('.messagebox')
1
。我们希望在每次迭代时增加它,以便文本发生变化。但我们只想计算数组元素的数量,然后回到第一个并重新开始。
下面,我使用JavaScript的increment
和remainder
运算符来增加i
,同时将其限制为a
中的元素数量。请注意,“后缀”方法“在递增之前返回值”,因此i
从零开始。
a[i++ % a.length]
工作范例:
$(function() {
let $messageBox = $('#messagebox');
let testOne = 'test one.';
let testTwo = 'test two.';
let a = ['test:', testOne, 'test2:', testTwo];
let i = 0;
function cool() {
$messageBox.text(a[i++ % a.length])
}
setInterval(cool, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="messagebox"></div>
编辑
我不喜欢让i
无限期地计算。在大约9千万亿次循环迭代之后,数学可能会变得很糟糕,这是JavaScript可以安全计算的高度。
在这种情况下,安全是指能够准确表示整数并正确比较它们的能力。例如,
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2
将评估为true,这在数学上是不正确的。 - developer.mozilla.org
console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MAX_SAFE_INTEGER + 1);
console.log(Number.MAX_SAFE_INTEGER + 2);
console.log(Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2);
那么,这是大约三百万个世纪后发生的事情:
$(function() {
let $messageBox = $('#messagebox');
let testOne = 'test one.';
let testTwo = 'test two.';
let a = ['test:', testOne, 'test2:', testTwo];
let i = 9007199254740990;
function cool() {
console.log(i);
$messageBox.text(a[i++ % a.length])
}
setInterval(cool, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="messagebox"></div>
这还不够好。 我们需要这个东西跑过the end of time。 让我们保持安全:
$(function() {
let $messageBox = $('#messagebox');
let testOne = 'test one.';
let testTwo = 'test two.';
let a = ['test:', testOne, 'test2:', testTwo];
let i = 0;
function cycleText() {
console.log(i);
$messageBox.text(a[i]);
i = ++i % a.length;
setTimeout(cycleText, 1000);
}
cycleText();
});
body {
font-size: 2em;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="messagebox"></div>
您可以轻松地交换阵列中的消息并使用您的代码更新html元素。不要传入硬编码索引,只需递增一个数字,直到达到数组的长度(n <array.length)并将其重置为0。
我个人会建议你的messagebox
元素是一个div
或开箱即用的东西只是为了可读性(所以没有人进来并混淆messagebox
来自哪里)。但是,如果您有自定义html元素的特定用例,请确保您正确执行此操作。
https://jsfiddle.net/mswilson4040/oxbn8t14/2/
<messagebox>Initial Value...</messagebox> // custom HTML element called messagebox
$(function() {
let testOne = 'test one.';
let testTwo = 'test two';
let interval = -1;
let messageBox = $('messagebox');
let a = ['test:', testOne,'test2:', testTwo];
// let i = 1 <-- this isn't doing anything
setInterval(cool, 1000)
function cool() {
interval = interval < a.length ? interval += 1 : 0;
messageBox.text(a[interval])
}
});