1

好的,我无法解决这个问题,我是一名 php / C# Web 开发人员,并且没有 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>

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

非常感谢您提前提供的帮助

4

2 回答 2

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 和
旧帖 DEMO | 老所以帖子

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

jQuery
jQuery.com(jQuery 的工作原理) | 示例(在页面中途返回基础知识) | 如果您使用第二个链接,还请阅读此

于 2012-09-21T19:07:59.510 回答
1

关于您关于检测窗口是否失焦的第一个问题,请参阅以下答案:有没有办法检测浏览器窗口当前是否处于活动状态?

这是可能的,但只有非常新的浏览器支持此功能,因此基于当前浏览器支持它可能没有用。

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

于 2012-09-21T19:09:22.197 回答