Javascript倒计时器在窗口未对焦时停止

时间:2012-09-21 18:59:57

标签: php javascript countdown

好的,我很难解决这个问题,我是一名php / C#开发人员,并且没有Javascript的经验或知识,我只需做一件需要Javascript的事情:

当某个页面加载时,计数器启动。客户必须在此页面上停留20秒。之后,我想执行php代码。

所以我有两个问题,首先:如果客户离开页面(如果页面没有聚焦),我如何停止计数器。

2)如何在javascript中执行php? ,或者从Javascript调用php函数。

到目前为止我的代码是:

<html>
<head>
</head>

<body>
<div id='timer'>
<script type="text/javascript">

COUNTER_START = 20

function tick () {
    if (document.getElementById ('counter').firstChild.data > 0) {
        document.getElementById ('counter').firstChild.data = document.getElementById ('counter').firstChild.data - 1
        setTimeout ('tick()', 1000)
    } else {
        document.getElementById ('counter').firstChild.data = 'done'
    }
}

if (document.getElementById) onload = function () {
    var t = document.createTextNode (COUNTER_START)
    var p = document.createElement ('P')
    p.appendChild (t)
    p.setAttribute ('id', 'counter')

    var body = document.getElementsByTagName ('BODY')[0]
    var firstChild = body.getElementsByTagName ('*')[0]

    body.insertBefore (p, firstChild)
    tick()
}

</script>
</div>
</body>
</html>

我还希望计时器在客户端返回页面时开始计时

非常感谢你提前帮助

2 个答案:

答案 0 :(得分:4)

您可以使用jQuery执行此操作 回收旧的Stackoverflow帖子,试试这个:

var window_focus;
var counter = 1000;

// on focus, set window_focus = true.
$(window).focus(function() {
    window_focus = true;
});

// when the window loses focus, set window_focus to false
$(window).focusout(function() {
    window_focus = false;
});

// this is set to the ('click' function, but you could start the interval/timer in a jQuery.ready function: http://api.jquery.com/ready/
$(document).one('click',function() {
    // Run this function every second. Decrement counter if window_focus is true.
    setInterval(function() {
        $('body').append('Count: ' + counter + '<br>');
        if(window_focus) { counter = counter-1; }
    }, 1000);
});

演示和旧帖子
DEMO | Old So post

<强>更新
可能因为演示在4个iframe中运行,$(window).focus位仅适用于实际运行代码的iframe(右下角窗口)。

<强>的jQuery
jQuery.com (How jQuery works) | Example (back to basics halfway down the page) |的 If you use the 2nd link, also read this

答案 1 :(得分:1)

关于检测窗口是否失焦的第一个问题,请参阅以下答案:Is there a way to detect if a browser window is not currently active?

这是可能的,但只有非常新的浏览器支持这一点,因此根据当前的浏览器支持可能没用。

要从Javascript触发PHP代码,您必须对服务器端PHP脚本进行AJAX调用以调用PHP,因为JS是客户端而PHP是服务器端。