2012-05-09 2 views
1

я написал небольшую JQuery Chatbox который загружает страницу в DIV и refeshes каждые 4 секунды:JQuery остановки/запуска Див обновления после х минут

На клик слайд вниз и страницу загрузки в DIV и обновления:

$('#toggle').click(function() { 
    $('#sbox').slideDown('fast'); 
    var refreshId = setInterval(function() { 
     $('#shout').load('shout.php?randval='+ Math.random()); 
    }, 4000); 
    return false; 
}); 

Это, однако, я предполагаю, что это немного ресурсов, с тем крылом думало, как о после й минут, если активность не обнаружена остановка освежающей, но возобновляет освежающую раз есть активность снова ...

Я нашел этот фрагмент ... https://stackoverflow.com/a/7026769/1359310 ... который проверяет активность (движение мыши) и отлично подходит для моих потребностей, но не может совместить их.

Чтобы подвести итог, я нахожусь на странице загрузки щелчка в div и начинаю обновлять, после x минут, если никакая активность не перестает обновляться, как только активность обнаружена снова, снова начните обновляться.

ответ

1

Что-то вроде этого должно это сделать. Вы должны уметь адаптировать его к вашим потребностям. Я по существу скопировал код из связанного с вами вопроса SO. Это добавляет активный/неактивный класс в тело. Вы увидите это, когда запустите мой код. Когда страница активна, экран синий. Это указывает на то, что происходит обновление. Когда экран серого цвета, не беспокойтесь об освежении.

Затем вы просто положили чек на активный/неактивный класс в свой код.

http://jsfiddle.net/scgEs/1

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() 
});​ 
+0

Только что обновил мой ответ. Забыл заменить мои переменные. – mrtsherman

+0

Спасибо mrtsherman, пришлось немного подстроить свои собственные потребности (очевидно), но хорошо работает, отмеченный как ответ:) –

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; 
}); 

Попробуйте это. :)

+0

Спасибо - сделал правку. Это должно было сделать это. :) –

+0

Выглядит хорошо для меня. – mrtsherman

+0

Делает то, что я хочу, но я получаю большой лаг загрузки страницы и запускаю все вкладки, открытые в браузере (FireFox), а не только мою страницу, мне даже иногда приходится открывать диспетчер задач, чтобы убить FF-процесс :( –

 Смежные вопросы

  • Нет связанных вопросов^_^