遍历数组中的字符串,每秒显示一个

时间:2018-11-08 22:40:05

标签: javascript jquery loops set settimeout

$(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新手。我希望在屏幕上的计时器中显示testOnetestTwo(打算再添加一些)。我得到了帮助,以实现这一目标。 例如,我试图让一个单词及其英语定义在时间循环中出现在屏幕上,从而使这些单词在循环中旋转。 (有点像实时屏幕保护程序)

我想念什么?

感谢您的时间,帮助和精力。

2 个答案:

答案 0 :(得分:0)

您可以轻松地交换数组中的消息并使用代码更新html元素。不用传递硬编码的索引,只需增加一个数字,直到它达到数组的长度(n

出于个人可读性考虑,我个人建议将您的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])
    }
});

答案 1 :(得分:0)

您有一个好的开始。

  1. 就像其他人提到的那样,除非您使用自定义HTML元素(即<messagebox>),否则在选择器的开头使用#来表明“ messagebox”是一个ID 。参见jQuery's ID Selector

    $('#messagebox')
    

    或者,使用一个类和class selector

    $('.messagebox')
    
  2. 要显示的数组元素的索引当前已硬编码为1。我们希望在每次迭代时增加它,以便文本会更改。但是我们只想计算数组元素的数量,然后返回第一个并重新开始。

    下面,我使用JavaScript的incrementremainder运算符来递增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>