2015-03-09 7 views
0

У меня есть единственная страница, которая содержит несколько частей. Я использую следующее меню навигации jsfiddle Я хочу рассчитать время, проведенное пользователем, чтобы прочитать часть страницы. Идея состоит в том, чтобы инициировать событие, когда активированная часть была изменена, и установить таймер, если таймер больше 5 секунд (например), пользователь читает раздел, тогда я отправляю запрос ajax, чтобы сэкономить время на чтение данная часть.Время, проведенное на странице страницы

TrackUserReading(function() { 
        var sectionName = $("nav ul#sidebar.nav li.active a").html(); 
        url = '/Main/TrackUserReading'; 
        data = { sectionName: sectionName, time : Timer }; 
        var dataType = "json"; 
        if(sectionName) 
         $.post(url, data, $.proxy(function (data, textStatus, jqXHR) { 
        }, this), dataType); 

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

Мой вопрос - лучший способ рассчитать время, проведенное пользователем с хорошей точностью. Спасибо заранее.

+0

Что делать, если пользователь переходит к новой части страницы, затем встает перед чтением любого из них и уходит на двухчасовую встречу? Вам нужно будет решить, какой уровень точности является приемлемым, и, возможно, выбросить выбросы, потому что ваша «новая вкладка» и мои «2-часовые встречи» сценарии _will_ придут вверх и сбросят ваше время. –

+0

Да, это мой вопрос, как я могу управлять этим, что является лучшим способом иметь хорошую точность? –

ответ

0

В хроме и Firefox в SetTimeout установлен огнь once every second while the tab is inactive

Чтобы проверить, если вкладка активны им заимствование ответа от here:

var interval_id; 
$(window).focus(function() { 
    if (!interval_id) 
     interval_id = setInterval(trackUserReading, 1000); 
}); 

$(window).blur(function() { 
    clearInterval(interval_id); 
    interval_id = 0; 
}); 

Когда вкладка сфокусирована вы можете выполнить вашу функцию , когда вкладка неактивна, она удаляет интервал и прекращает выполнение вашей функции.

+0

Что делать, если компьютер имеет 2 экрана? –

+0

Это проверяет, находится ли фокус в окне сайта, поэтому, если у пользователя есть два экрана и он не активно просматривает текущий экран, окно должно быть неактивным.> Я не пробовал, поэтому, если вы это сделаете, пожалуйста, подтвердите –

+0

, если пользователь меняет положение мыши на 2-й экран, фокус будет инактивирован, но он может продолжать чтение на 1-м экране, что означает, что я получаю меньше точности. В таких проблемах я думаю, что мы не можем получить 100% точности, мы должны использовать порог ошибки –

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