2

下面我有一个运行良好的javascript倒数计时器:

    <h1><span id='countdown'><?php echo $dbSessionDuration; ?></span></h1>

...

  $(document).ready(function() {
    var time = <?php echo json_encode($dbSessionDuration); ?>,
      parts = time.split(':'),
      hours = +parts[0],
      minutes = +parts[1],
      seconds = +parts[2],
      span = $('#countdown');


    function correctNum(num) {
      return (num<10)? ("0"+num):num;
    }

    var timer = setInterval(function(){
        seconds--;
        if(seconds == -1) {
            seconds = 59;
            minutes--;

            if(minutes == -1) {
                minutes = 59;
                hours--;

                if(hours==-1) {
                  alert("timer finished");
                  clearInterval(timer);
                  return;
                }
            }
        }
        span.text(correctNum(hours) + ":" + correctNum(minutes) + ":" + correctNum(seconds));
    }, 1000);

});

现在我想做的是使用上面的示例并操作它现在做相反的事情并创建一个从 00:00:00(小时、分钟、秒)开始的计数计时器。

但问题是它不起作用。什么都没有发生。我不知道我在下面的函数中是否需要一个小时,因为作为一个计数,时间可以根据需要增加到尽可能多的小时。但我的问题是如何修复倒计时计时器以使其完全正常工作?

<p><input type='text' class='responseTime' name='responsetime' value='00:00:00' /></p>

...

$(document).ready(function() {
var response = "00:00:00",
      parts = time.split(':'),
      hours = +parts[0],
      minutes = +parts[1],
      seconds = +parts[2],
      input = $('.responseTime');


    function correctResponse(responsenum) {
      return (responsenum<10)? ("0"+responsenum):responsenum;
    }

    var responsetimer = setInterval(function(){
        seconds--;
        if(seconds == +59) {
            seconds = 00;
            minutes--;

            if(minutes == +59) {
                minutes = 00;
                hours--;

                  return;

            }
        }
        input.text(correctResponse(hours) + ":" + correctResponse(minutes) + ":" + correctResponse(seconds));
    }, 1000);


  });

更新:

另外作为旁注,我意识到我认为倒计时计时器每秒每 2 秒倒计时一次。如何为倒数计时器排序并包含在正数计时器中?

下面的代码我已更改为包含增量 ++ 并包含 .val 而不是 .text 但发生的情况是它从 00:00:00 开始,然后下降到 00:59:60 然后停止:

var response = "00:00:00",
          parts = time.split(':'),
          hours = +parts[0],
          minutes = +parts[1],
          seconds = +parts[2],
          input = $('.responseTime');


        function correctResponse(responsenum) {
          return (responsenum<10)? ("0"+responsenum):responsenum;
        }

        var responsetimer = setInterval(function(){
            seconds++;
            if(seconds == +59) {
                seconds = 00;
                minutes++;

                if(minutes == +59) {
                    minutes = 00;
                    hours++;

                      return;

                }
            }
            input.val(correctResponse(hours) + ":" + correctResponse(minutes) + ":" + correctResponse(seconds));
        }, 1000);


      }); 
4

5 回答 5

2

在 jQuery 中,使用该val('value')函数更改/设置输入字段的值。

更改input.text(...)input.val(...)

还:

  1. 在增加秒数后使用seconds = seconds % 60;将它们带回0.
  2. 另外,考虑使用data-attributes用于将值传递给 javascript。
于 2013-02-07T22:25:48.163 回答
2

您可以像这里一样轻松地修改当前的倒数计时器:http: //jsfiddle.net/Sergiu/CDpeJ/3

var timer = setInterval(function(){
    seconds++;
    if(seconds == 60) {
        seconds = 00;
        minutes++;

        if(minutes == 60) {
            minutes = 00;
            hours++;
        }
    }
    var newTime = hours + ":" + minutes + ":" + seconds;
    if(!newTime.match(/^(20|21|22|23|[01]\d|\d)(([:.][0-5]\d){1,2})$/)) newTime = "finished";
    $('#timeInput').val(newTime);
}, 1000);
于 2013-02-07T22:32:07.010 回答
2

这就是我实现这样一个计时器的方式:

function startTimer() {
    var time = 0
    setInterval(function(){
        time++
        var sec = time % 60
        var min = (time-sec)/60 % 60
        var hour = (time-sec-min*60)/3600
        var str= hour+':'+("0"+min).slice(-2)+':'+("0"+sec).slice(-2)
        $('.responseTime').val(str)
    },1000);
}

使用带有类的输入responseTime来显示计时器。(为什么不使用 id 顺便说一句?)

在适当的调用时开始startTimer()(在您的示例中使用document.onload=startTimer

如果要从 0 以外的其他时间开始,请设置time适当的秒数。对于倒计时,替换time++time--(可能为 增加一些物流time==0

于 2013-02-07T22:52:05.530 回答
0

数数试试这个

var millis = <?php echo $dbSessionDurationTime; ?> ( diff in seconds )

function displaytimer(){
    var hours = Math.floor(millis / 36e5),
        mins = Math.floor((millis % 36e5) / 6e4),
        secs = Math.floor((millis % 6e4) / 1000);
        //Here, the DOM that the timer will appear using jQuery
        $('.count').html(hours+':'+mins+':'+secs);  
}

setInterval(function(){
    millis += 1000;
    displaytimer();
}, 1000);
于 2016-01-19T10:02:41.720 回答
0

我向 JSFiddle 添加了 Mariusnn 解决方案和 Oerd 建议,并在 Jquery 中将 val 更改为文本。

HTML 文件

<body> <h1 style="color:blue">Time</h1> <h2><span class="responseTime" style="color:indianred"></span> </h2> </body>

JS代码

` var startTimer;

startTimer = function() {
var time;
time = 0;
setInterval((function() {
    var hour, min, sec, str;
    time++;
    sec = time % 60;
    min = (time - sec) / 60 % 60;
    hour = (time - sec - (min * 60)) / 3600;
    count = hour + ':' + ('0' + min).slice(-2) + ':' + ('0' + sec).slice(-2);
    $('.responseTime').text(count);
    }), 1000);
   };

$( document ).ready(function() {
    startTimer();
});

`

JS小提琴解决方案在这里。

https://jsfiddle.net/hzLf3e38/4/

于 2016-02-09T12:31:32.710 回答