我写了一个小的jQuery聊天框,它在div中加载一个页面并每4秒刷新一次:
单击向下滑动并在div中加载页面并刷新:
$('#toggle').click( function () {
$('#sbox').slideDown('fast');
var refreshId = setInterval(function() {
$('#shout').load('shout.php?randval='+ Math.random());
}, 4000);
return false;
});
然而,我猜这是一个资源消耗,所以如果没有检测到任何活动,在x分钟后如何考虑停止刷新,但一旦有活动就恢复刷新...
我找到了这个片段...... https://stackoverflow.com/a/7026769/1359310 ...检查活动(鼠标移动)并且看起来非常适合我的需要,但似乎无法将两者结合起来。
总结我在点击div中的点击加载页面并开始刷新,在x分钟后如果没有活动停止刷新,一旦再次检测到活动再次开始刷新。
答案 0 :(得分:1)
// If theres no activity for 2 minutes do something
var isActive = true;
var isRefreshing = false;
var refreshChatboxWait = 4000;
var activityTimoutWait = 120000;
var activityTimeout = setTimeout(inactive, activityTimoutWait);
function resetActive(){
isActive = true;
clearTimeout(activityTimeout);
if ( ! isRefreshing ) {
var refreshId = setInterval(refreshChatbox, refreshChatboxWait);
}
activityTimeout = setTimeout(inactive, activityTimoutWait);
}
// No activity do something.
function inactive(){
isActive = false;
}
function refreshChatbox(){
$('#shout').load('shout.php?randval='+ Math.random());
if ( ! isActive ) {
clearInterval(refreshId);
}
}
// Check for mousemove, could add other events here such as checking for key presses ect.
$(document).bind('mousemove', function(){resetActive()});
$('#toggle').click( function () {
$('#sbox').slideDown('fast');
if ( ! isRefreshing ) {
var refreshId = setInterval(refreshChatbox, refreshChatboxWait);
}
return false;
});
试试吧。 :)
答案 1 :(得分:1)
这样的事情应该这样做。您应该能够根据您的需求进行调整。我基本上复制了你链接的SO问题的代码。这会向正文添加一个活动/非活动类。运行我的代码时,您将看到这一点。页面处于活动状态时,屏幕显示为蓝色。这表明令人耳目一新。当屏幕为灰色时,请不要打扰。
然后,您只需检查代码中的活动/非活动类。
var refreshrate = 4000;
var inactivitytime = 15000;
var refreshid; //set to global scope so that you can clear it later
var activityTimeoutId; //store timeout for inactivity
$('#sbox').slideUp();
$('#toggle').click(function() {
$('#sbox').slideDown('fast');
refreshId = setInterval(function() {
if ($('body.inactive').length == 1) {
$('#sbox').append('<div>No refresh</div>');
}
else {
console.log('Refreshing data');
$('#sbox').append('<div>Refreshed...</div>');
//$('#shout').load('shout.php?randval=' + Math.random());
}
}, refreshrate);
return false;
});
// If theres no activity for X seconds do something
activityTimeoutId = setTimeout(inActive, inactivitytime);
function resetActive() {
$(document.body).attr('class', 'active');
clearTimeout(activityTimeoutId);
activityTimeoutId = setTimeout(inActive, inactivitytime);
}
// No activity do something.
function inActive() {
$(document.body).attr('class', 'inactive');
}
// Check for mousemove, could add other events here such as checking for key presses ect.
$(document).bind('mousemove', function() {
resetActive()
});