如何创建一个javascript计时器?

时间:2013-11-08 20:07:04

标签: javascript html timer

我想在提交按钮事件上开始/显示timer。我正在使用spring mvc。所以在提交时,它会进入控制器,执行一些逻辑并被重定向回到原始的jsp页面。问题是当计时器从控制器重定向时,页面加载时会重置。一旦计时器启动,它就不应该是重置,直到单击停止计时器按钮。我如何实现这个功能?我正在使用一个jquery计时器插件,但它不太正常。我尝试添加counter=0值,它也不正确。 这是我的代码:

var counter=0;

function updatecounter(){
    counter = 1;
    Example1.init();
}

var Example1 = new (function() {

    var $stopwatch, 
        incrementTime = 70, 
        currentTime = 0,
        updateTimer = function() {
            $stopwatch.html(formatTime(currentTime));
            currentTime += incrementTime / 10;
        };

    this.init = function() {
        $stopwatch = $('#stopwatch');
        Example1.Timer = $.timer(updateTimer, incrementTime, true);
    };

    this.resetStopwatch = function() {
        currentTime = 0;
        this.Timer.stop().once();
    };

    if(counter!=0){
        $(init);
    }
});

HTML标记:

<h2><span id="stopwatch">00:00:00:00</span></h2>

<input type="submit" value="Run Script" name="Run Script" class="button"onclick='updatecounter();' />

<input type="submit" value="Stop Script" name="Stop Script" class="button" onclick='Example1.resetStopwatch();/>

3 个答案:

答案 0 :(得分:1)

我不打算尝试创建一个完整的应用程序堆栈,所以我会保持这个简单。

如果你必须重定向到Spring Controller,那么你将不得不

  1. 将开始时间从页面传回控制器
  2. 将相同的开始时间从控制器传递回原始页面
  3. 检查页面加载时的开始时间
    • 启动计时器
    • 为计时器添加时间,等于从服务器报告的开始时间与现在
    • 之间的差异
  4. 所以在伪代码中:

    if( startTime IS set ){
        timer.start();
        timer.setStartTime( startTime );
    }
    

    这将假设您的计时器只是计算与开始时间的差异以显示计数。

    然而,更好的选择是页面不能重定向到服务器 只需发送一个AJAX请求,让它随时返回,你可以让你的计时器一直运行。

    这最有意义,因为您问题的本质("I need this thing to happen at the same time another thing is happening!"尖叫 异步,这是 A 在AJAX中。

答案 1 :(得分:0)

答案 2 :(得分:0)

好的最后我找到了解决问题的方法。在提交时,我在服务器端创建了一个标志,并在页面加载时将其传递给jsp。基于该标志,它会自动启动计时器。由于它是一个快速的过程,(转发到控制器并重定向回jsp),时间延迟可以忽略不计。