【问题标题】:jQuery Flipclock show print text duplicate inside interval functionjQuery Flipclock在间隔函数内显示重复的打印文本
【发布时间】:2021-06-08 08:14:31
【问题描述】:

我正在与jQuery Flipclock合作

效果很好。 然后现在我有按钮修改时间,如果我单击它,时间将更改为 10 秒并将文本打印到 span 信息中。但是为什么还是会出现旧的计数值呢?如何在不显示旧计数值的情况下仅在 10 秒内(单击按钮)打印到 span 信息?

$('.modifytime').on('click', function() {
  countdown(10);
});


function countdown(b) {
  if (b == undefined) {
    a = 15;
  } else {
    a = 10
  }

  clock = $('.clock').FlipClock(a, {
    clockFace: 'MinuteCounter',
    countdown: true,
    autoStart: true,
    callbacks: {
      start: function() {
        $('.message').html('The clock has started!');
      },
      interval: function() {
        var time = this.factory.getTime().time;

        $('.info').html(time);
      },
      stop: function(){
        alert("Counting done");
      }
    }
  });
}

countdown();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link href="https://kms.puksiix.com/flipclock.css" rel="stylesheet" />
<script src="https://kms.puksiix.com/flipclock.js"></script>

<div class="clock"></div>
<span class="info"></span>

<button class="modifytime">Modify</button>

更新 如果我把这个脚本:

stop: function(){
    alert("Counting done");
}

即使我只是点击按钮,它也总是显示“计数完成”。

【问题讨论】:

    标签: javascript html jquery flipclock


    【解决方案1】:

    那个相当过时的库的文档似乎不再存在。但是,如果您在 Github 中查看库的源代码,您会发现有一个可以在实例上调用的 stop() 方法。

    要在按钮单击之间保留对实例的引用,您可以将其存储在 data 旁边的 .clock 元素中,如下所示:

    let $clock = $('.clock');
    
    $('.modifytime').on('click', function() {
      countdown(10);
    });
    
    function countdown(delay) {
      delay = delay || 100;
      
      // check for previous instance and stop it counting down
      let prevInstance = $clock.data('flipclock');
      if (prevInstance)
        prevInstance.stop();
      
      let clockInstance = $clock.FlipClock(delay, {
        clockFace: 'MinuteCounter',
        countdown: true,
        autoStart: true,
        callbacks: {
          start: function() {
            $('.message').html('The clock has started!');
          },
          interval: function() {
            var time = this.factory.getTime().time;
            $('.info').html(time);
          }
        }
      });
    
      // save new instance in element metadata
      $clock.data('flipclock', clockInstance);
    }
    
    countdown();
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <link href="https://kms.puksiix.com/flipclock.css" rel="stylesheet" />
    <script src="https://kms.puksiix.com/flipclock.js"></script>
    
    <div class="clock"></div>
    <span class="info"></span>
    <button class="modifytime">Modify</button>

    【讨论】:

    • 您好,刚才我使用stop: function 进行了测试(您可以查看我上面更新的帖子)。为什么当我点击按钮时它总是显示“计数完成”。
    • 它显示“计数完成”,因为您将它放在 stop 事件处理程序中。每次您停止前一个计数器并启动一个新计数器时都会调用它。
    • 嗨,如果我们删除/删除元素可以吗?所以它会破坏元素,然后用新的计数器计数。
    • 当然,在现有的上调用remove(),然后在新的上调用append(),确保再次初始化翻转时钟
    • 你能举一个你当前代码的例子吗?这对我很有帮助。
    【解决方案2】:

    快速浏览源代码表明您可以在开始新时钟之前.stop 现有时钟:

    clock.stop();
    

    将此添加到您的 countdown() 函数中。 Snippet 包含第二个按钮,用于停止以显示此独立工作。

    $('.modifytime').on('click', function() {
      countdown(10);
    });
    
    $(".stop").on("click", function() { clock.stop(); });
    
    
    var clock;
    
    function countdown(b) {
      if (b == undefined) {
        a = 100;
      } else {
        a = 10
      }
    
      if (clock) clock.stop();
    
      clock = $('.clock').FlipClock(a, {
        clockFace: 'MinuteCounter',
        countdown: true,
        autoStart: true,
        callbacks: {
          start: function() {
            $('.message').html('The clock has started!');
          },
          interval: function() {
            var time = this.factory.getTime().time;
    
            $('.info').html(time);
          }
        }
      });
    }
    
    countdown();
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <link href="https://kms.puksiix.com/flipclock.css" rel="stylesheet" />
    <script src="https://kms.puksiix.com/flipclock.js"></script>
    
    <div class="clock"></div>
    <span class="info"></span>
    
    <button class="modifytime">Modify</button>
    <button class="stop">Stop</button>

    【讨论】:

    • 您好,刚才我用stop: function 进行了测试(你可以看到我上面更新的帖子)。为什么当我点击按钮时它总是显示“计数完成”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2010-12-23
    • 2018-05-20
    相关资源
    最近更新 更多