Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > время пребывания на страничке


Автор: klyxa 27.11.2007, 14:39
Ребят.дайте пожайлуста пример,как сделать,чтобы я мог посчитать время пребывания пользователя на странице..например ""дергал" ли скролл. Ну мне это нужно для того,чтобы знать сколько времени юзер читал правила,соглашения.я джава скрипте я не рулю.хелпп!

Автор: solenko 27.11.2007, 15:14
Если не секрет, зачем?
Вы так хотите чтобы пользоватеь прочитал соглашение? Ну ладно, я схожу покарю пока это время пройдет.
Пользователь или прочитает по собственной соле, и не прочитает как бы не изворачивался программист.

Автор: Castro 27.11.2007, 15:17
Время прибывания на странице можно попробовать узнать прицепив таймер на onload/unload и узнав разницу значений. 
Насчёт скролла подказать не смогу, не скажу так же насколько это всё кроссбраузерно. А как у Вас документ для чтения вложен? 
Можно сделать ход конём-если у Вас он грузится через frame, то теоретически скажем можно прицепить какой-то див скрытый на страницу и отслеживать изменялись ли его координаты, тоесть скролилась ли страница smile

Добавлено через 1 минуту и 9 секунд
solenko,  мне тож интересно зачем такое нужно smile)Попытка скопировать то, что в приложениях сделано?! smile 

Автор: 12345c 27.11.2007, 16:54
klyxa, если Вы в скриптах не разбираетесь, зачем Вам этот пример? Он далеко не простой, даже не в 20 строчек. Нужно решить ряд задач:

1) сбрасывать на сервер отчёты о прокрутке страницы без её перезагрузки (XMLHttp);
2)  определить, сколько времени задерживался юзер на каждом из участков (такой методики даже нет, нужно изобретать самому; переменные - скорость чтения, размер шрифта, величины прокрутки);
3) определять, покрыто ли было окно другим или не было ли свёрнуто (удивительно, но это возможно, не буду рассказывать, как, для краткости);
4) определить, работал ли пользователь с другим приложением во время чтения (как ни странно, это тоже возможно - нагрузив браузер выполняемым скриптом и измеряя скорость выполнения; в разных браузерах эффект будет несколько разным).
5) и тут не факт, что, прокручивая страницу, он не глядел в сторону. На помощь может прийти только предположение, что если перерывы нерегулярные, то он отвлекался. Напишите модуль, спрашивающий юзера, что он делал с 10 до 11, когда на компе висела 15-я страница Лицензионного соглашения. : )

Ну как, возьмётесь сделать, не зная языка и не имея опыта?

В наиболее простом виде это - да, замерить время между появлением документа (не onload!) и уходом со страницы, которое лучше измерить _на сервере_, не JS-ом. Прокрутка регистрируется событиями onscroll и onmousewheel и измеряется свойством document.body.scrollTop или document.documentElement.scrollTop. Отправлять отчёт о прокрутке - снова Ajax (XMLHttp). Так что в наиболее халтурном виде всё равно нужны серьёзные знания не только в JS.

Автор: Castro 27.11.2007, 16:58
Мдя. Если юзер не захочет что-то читать, его и заставить не получится, разве когда это ему действительно нужно

Автор: klyxa 27.11.2007, 22:19
да там какбы сайт фирмы. и заказчику нужно знать сколько времени убил нов. сотрудник над чтением всякой лобуды. реализация кнечно жопная

Добавлено через 4 минуты и 29 секунд
а  в сети есть скрипты? я хоть разобраться попробую..просто узнать время пребывания.хрен а этот скролинг

Автор: HotHead 27.11.2007, 22:32
Я бы первым делом задумался над рализацией этой ерундятины на серверной стороне. При заходе на страницу писать серверное время в сессию, а потом вычитать его из времени следующего обращения к сайту.

Автор: klyxa 27.11.2007, 22:36
на пхп вот я думаю можно так..ставим сессию,со тек знач. времени. потом при нажатии "я согласен",например, будет браться знач. выичтать из текущей..и без аяксов и пр.))

Добавлено через 4 минуты и 2 секунды
HotHead, гы твой пост не прочитал. да я то так подумал. но мне хотелось чтобы как закзчик просил сос кроль барами. а ту без джавы никуда..а вот..скажте плиз как сделать событие вроде onClick на скроль баре..я сделаю скрытое поле hidden да ему знач. on-off хотябы и далее опять через пхп)

Автор: ksnk 28.11.2007, 00:13
window.onscroll - хандл для обработчика скролла оконного 
window.onresize - для ресайза.

Еще можно навесить на document.onmousemove, для пущего страху... Нехай босc будет удовлетворен smile

Автор: klyxa 28.11.2007, 01:39
камрад,плииз,живой пример. я могу отредактировать js код неоч. сложный. но вот сам чото написать я немогу(

Автор: ksnk 28.11.2007, 10:20
Код

<html><head>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title> Не спи - замерзнешь</title>
</head>
<script language="javascript" type="text/javascript">
/**
 * @projectDescription Считаем, что юзер не спит, если он шевелит мышом, скроллером или окном.
 */    
/**
 * функция, выставляющая обработчик события на какой-то DOM объект 
 * @param {Object} a -тот самый DOM объект 
 * @param {Object} e -то самое событие без префикса on, можно указывать массив
 * @param {Object} o -та самая функция
 */
function attachEvent(a,e,o){
        if (e instanceof Array) 
            for(var i=0;i<e.length;i++) attachEvent(a,e[i],o);
        else if (document.addEventListener)
            a.addEventListener(e,o,false)
        else
            a.attachEvent('on'+e,o,false)
    }
/**
 * функция, удаляющая ранее установленый обработчик
 * @param {Object} a -тот самый DOM объект 
 * @param {Object} e -то самое событие без префикса on, можно указывать массив
 * @param {Object} o -та самая функция
 */
function detаchEvent(a,e,o){
    if (e instanceof Array) 
        for(var i=0;i<e.length;i++) detаchEvent(a,e[i],o);
    else if (a.removeEventListener) {
        a.removeEventListener(e, o, false);
    } else if (a.detachEvent) {
        try {
            a.detachEvent('on' + e, o);
        } catch (aEx) {}
    }
}
    
(function(){ // function - для сокрытия от общественности продуктов жизнедеятельности
    /**
     * время начала теста
     */
    var DateStart=new Date(),
    /**
     * Время последнего действия юзера
     */
        NoSleepTill= DateStart,
    /**
     * время, в течении которого юзер не сможет уснуть (в миллисекундах)
     */
        reading_delay=10000,
    /**
     * обработчик событий
     */
        handle=function(){
            NoSleepTill=new Date();    
        },
    // устанавливаем интервал проверки
        interval=setInterval(function (){
                var D=new Date();
                if((D.getTime()-NoSleepTill.getTime()) >reading_delay){
                    alert('Клиент спит!');
                    NoSleepTill=new Date();
                }
            },reading_delay)
    
    // поставим обработчик
    attachEvent(window,['scroll','resize','mousemove'],handle)    

    // за ради любви к чистоте! Также, иногда помогает IE почистить кучку за собой
    attachEvent(window,['unload'],function(){
        clearInterval(interval);
        detachEvent(window,['scroll','resize','mousemove'],handle);
    })
})()    
</script>
<body>
Ну очень -очень длинный текст<br>
Ну очень -очень длинный текст<br>

</body></html>


Автор: klyxa 28.11.2007, 12:09
спасибо. подредактировал под себя - то что надо.обязательно тебе +1,когда у мя рейт. соотв. будет;) 

Автор: dsCode 28.11.2007, 14:16
klyxa, =)) для Вас интерес составлял лишь пример работы с событиями и таймерами. Сама суть таска - честно, бредовая (так и передайте начальству ;)). Это как шутка была: "Ученные выяснили, что самой быстрой техникой чтения (примерно 0.2 секунды/текст) обладают русские. Это было определено по тому факту, как они читают условия лицензионного соглашения". =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)