【问题标题】:Get Next Array Element with Timeout获取具有超时的下一个数组元素
【发布时间】:2017-11-19 14:29:09
【问题描述】:

我试图检查一个 WordPress(自定义字段)数组。我想先打印array[0],6s后打印array1等直到它到达数组的末尾,然后它应该再次打印array[0]

它曾经有效,但现在不再有效。我找不到错误。似乎在 6 秒的时间间隔内,它会打印 2 个引号,但总是跳过一个。例如。在控制台中它会同时打印12 & 34,但在h2 中它只设置13

我还给你一个报价的截图。这是一个活生生的例子:http://www.inaregen.at/

<!-- header.php -->
<h2 id="quote"></h2>
<?php
  $allQuotes = get_post_meta(19, 'zitat', false);
?>
<script>
  var quoteJson = <?php echo json_encode($allQuotes); ?>;
</script>
// Quotes.js in footer.php
var prevQuote = null;
var getNextQuote = function() {
  if (prevQuote == null) {
    prevQuote = 0;
  }
  if (prevQuote == 0 || prevQuote > 0) {
    prevQuote += 1;
  }
  if (prevQuote == quoteJson.length + 1) {
    prevQuote = 0;
  }
  console.log(prevQuote);
  return quoteJson[prevQuote];
}

var setQuote = function() {
  var quote = getNextQuote();
  $("#quote").text(quote);
  setTimeout(setQuote, 6000);
}

jQuery(document).ready(function($) {
  setQuote();
});

enter image description here

【问题讨论】:

    标签: javascript jquery css json wordpress


    【解决方案1】:

    我发现您在处理 getNextQuote 函数中的所有 if...else 案例时遇到了一些问题。
    您可以通过完全删除该函数使代码更简单:

    注意:这假定quoteJson 不为空。

    var quoteIndex = 0;
    
    var setQuote = function() {
      var quote = quoteJson[quoteIndex];
      $("#quote").text(quote);
      quoteIndex = (quoteIndex + 1) % quoteJson.length; // calculate next index
      setTimeout(setQuote, 6000);
    }
    

    【讨论】:

    • 像这样使用模数 (%) 是处理大多数情况下您想要迭代数组并在到达末尾时再次从 0 开始的好方法。
    • 哦,是的,不知道这种方式:) 但它仍然跳过下一个数组索引。它显示索引 0 然后索引 2 然后 4 .... 为什么? ://
    【解决方案2】:

    您不能让索引与数组长度相同。

    长度从 1 开始,但索引从零开始。所以如果索引等于长度......你已经过了数组的末尾

    变化:

    if (prevQuote == quoteJson.length + 1) {
    

    if (prevQuote == quoteJson.length) {
    

    【讨论】:

    • 好的,谢谢 :) 但这不是我的问题 :) 我想知道为什么在控制台中同时打印了两个数组索引,而其中一个在输出中被遗漏了。跨度>
    • 通过将您的 php 换成简单的 javascript 数组并添加一些元素来创建一个可运行的版本。见minimal reproducible example
    • 打开页面源并复制​​一些相关输出
    • 我刚刚想到。代码是否显示在 php 循环中并且在页面中被多次复制?
    • 它不在循环内。我这样得到数组:

    【解决方案3】:

    我刚刚意识到,我需要输出 else if 而不是 if。 但是现在当它打印例如 array[1] 并进入下一个间隔时,它会显示 array[1] 0.5 秒,然后进入 getNextQuote 函数。 不知道如何解决这个问题。 这是数组:(当我执行 console.log(array) 时)

    (10) ["Wie schee is des Gfüh, wann ma’s Fliagn probiert?", "Wie tiaf kånn ma foin, wann ma in Bodn verliert?", "Wie bleibt ma kloa und wie wird ma groß?", "Wann hoit ma fest? Wann låsst ma los?", "Kann I irgendwånn wieda so sei wie a Kind?", "Warum? Woher? Wohin? I fråg amoi in Wind", "Was bleibt nu offm, am Ende vom Kras?", "Was deaf ma hoffm, wenn ma goa nix mehr waß?", "Wie foit ma hin und måcht si nix draus?", "Wie fångt ma ån? Wie steht ma auf?"]
    

    【讨论】:

    • 但它永远不会为空并将 prevQuote 设置为 0 .... 它总是需要 1... 我不明白... ^^
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多