处于非活动状态时停止UpdatePanel

时间:2009-04-20 19:14:42

标签: asp.net javascript ajax updatepanel

您好我想做以下事情:

使用JavaScript在浏览器处于非活动状态时停止更新面板“更新”,并在其再次处于活动状态时重新启动。我在看:Inacivity with JavaScript。我希望我能用它来完成我想要的东西;有人能指出我正确的方向吗?非常感谢你!

[编辑] 我正在使用Timer进行更新,所以如果我能以某种方式从JavaScript中禁用Timer,我想我可以这样做。

5 个答案:

答案 0 :(得分:0)

我建议您阅读本书: http://oreilly.com/catalog/9780596527471/。它告诉您有关ASP.NET AJAX UpdatePanel控件的所有信息。有关API文档,请访问: http://msdn.microsoft.com/nb-no/library/bb311028(en-us).aspx

答案 1 :(得分:0)

利用当前窗口对象的'mousemove'事件是什么? 如果移动了鼠标,请将计时器设置为1分钟左右,然后停用事件。 使用setInterval()重复此循环。

如果用户暂停了一段时间,这也会有所帮助。

答案 2 :(得分:0)

在头部事件

中添加此脚本
<script type ="text/javascript">
    var timerEnabled = true;

    function ToggleTimer(btn, timerID)
    {
        // Toggle the timer enabled state
        timerEnabled = !timerEnabled;

        // Get a reference to the Timer
        var timer = $find(timerID);
        if (timerEnabled)
        { 
            btn.value = 'Pause';
            // Start timer
            timer._startTimer();
        }
        else
        {
            btn.value = 'Resume'; 
            // Stop timer
            timer._stopTimer();
        }            
    }
</script>

在更新面板中添加一个asp.net标签控件以进行测试

<asp:Label Id="Label1" Text="" runat="server" />

在更新面板外添加一个html按钮

<input type="button" id="btntimercontroller" value="Pause" onclick="return ToggleTimer(btntimercontroller, '<%= ajaxtimer.ClientID%>');" />

检查计时器是否停止在aspx.cs文件中添加此代码

protected void Page_Load(object sender, EventArgs e)
{       
    Label1.Text = DateTime.Now.ToLongTimeString();    
}

只是省略脚本中的(“)标记,因为它会导致错误......

答案 3 :(得分:0)

window.blur = function() { stopTimer() }
window.focus = function() { startTimer() }

浏览器兼容性可能适用。希望这会有所帮助。

答案 4 :(得分:0)

我在这里找到了一个潜在的解决方案:http://www.thefutureoftheweb.com/blog/detect-browser-window-focus

我现在只有IE8进行测试,这有几个问题。首先,单击页面上的各个元素将触发focusin事件,因此您需要一种方法来检查计时器是否已在运行。这不是太难。当你点击时,ie8也会触发focusout事件,因此我们必须延迟实际的计时器停止以确保窗口实际上没有焦点。幸运的是,当你点击页面时,ie8似乎总是在focusin之后立即触发focusout,因此我们可以在focusin处理程序上取消待定的计时器关闭。

我认为这应该与工作解决方案非常接近。 (改编自链接)

// indicates if your refresh timer is running
var updatePanelTimerRunning = true;

// timer id for shutdown procedure
var killTimerID = -1;

function stopTimer(e) {
    // prepare to shutdown
    if (updatePanelTimerRunning && killTimerID == -1) {
        killTimerID = setTimeout(timerShutdown, 1000);
    }
}

function startTimer(e) {

    // cancel pending timer shutdown
    clearTimeout(killTimerID);
    killTimerID = -1;

    if (!updatePanelTimerRunning) {
        // TODO start the update panel refresh timer here
        updatePanelTimerRunning = true;
    }
}

function timerShutdown() {
    // TODO do actual update panel timer stopping here.
    updatePanelTimerRunning = false;
}


if (/*@cc_on ! @*/ false) { // check for Internet Explorer

    document.attachEvent('onfocusin', startTimer);
    document.attachEvent('onfocusout', stopTimer);
}
else {
    // window.onfocus = stopTimer;
    // window.onblur = startTimer;

    window.addEventListener('focus', startTimer, false);
    window.addEventListener('blur', stopTimer, false);
}