【问题标题】:Countdown timer-php+mysql+js倒计时-php+mysql+js
【发布时间】:2011-06-21 04:46:56
【问题描述】:

我正在做在线考试。其中考试时间将由 mysql 获取(以分钟为单位)。我想在页面顶部显示倒计时时间。

目前我正在使用

http://javascript.internet.com/time-date/countdown-timer.html

但主要问题是 .. 每次显示新问题时 .. 页面都会刷新并且 ..timer 从头开始​​重新设置。

请帮我看看主要问题在哪里?

如果您想建议,或者任何其他示例?

谢谢

【问题讨论】:

    标签: javascript mysql countdown


    【解决方案1】:

    在运行测试之前,您需要在服务器端计算准确的测试结束时间并将其保存到会话中:

    <?php
    if (empty($_SESSION['test_will_end_by'])) {
        $_SESSION['test_will_end_by'] = time() + $test_duration_in_seconds;
    }
    ?>
    

    然后,如果您将其从 HTML 提供给客户端脚本:

    Time left:
    <span class="timer" data-end="<?php 
        echo date(DateTime::RFC1123, $_SESSION['test_will_end_by']); 
    ?>"></span>
    

    将此代码添加到您的 jQuery DOM-ready 处理程序中以启动页面上的所有计时器:

    $('.timer').each(function() {
        var target = new Date($(this).data('end')), update, $this = $(this);
        (update = function () {
            var now = new Date();
            $this.text((new Date(target - now)).toUTCString().split(' ')[4]);
            if (Math.floor((target - now)/1000) == 0) return; // timer stops
            setTimeout(update, 1000);
        })();
    });
    

    【讨论】:

      【解决方案2】:

      每次刷新页面时,JavaScript 代码都会再次运行,因此计时器会被重置。解决这个问题,在不刷新页面的情况下获取内容,即:Ajax。

      【讨论】:

      • 你能提供任何示例代码或链接,我可以通过它有想法吗?
      【解决方案3】:

      您可以使用表单submit 或页面beforeunload 事件将当前值存储在cookie 中。然后当新页面加载时,获取剩余时间并继续倒计时。这也允许一些网络延迟。

      请注意,用户可能能够访问和修改 cookie 的值。

      【讨论】:

        【解决方案4】:

        将问题开始时间存储在会话中,当页面刷新时,从服务器获取会话开始时间差并将它们显示在网页中。您可以在不使用 AJAX 的情况下从客户端 javascript 代码中执行增量部分。

        【讨论】:

          猜你喜欢
          • 2016-08-22
          • 2023-02-10
          • 2021-08-25
          • 1970-01-01
          • 2014-12-13
          • 1970-01-01
          • 1970-01-01
          • 2012-05-10
          • 1970-01-01
          相关资源
          最近更新 更多