Отслеживать, как долго пользователь просматривает слайд слайд-шоу с изображениями.

В настоящее время я работаю над проектом, который требует, чтобы веб-приложение отслеживало, как долго пользователь остается на одном слайде слайд-шоу. Скажем, в онлайн-слайд-шоу 5 слайдов (от слайд-1.png до слайд-5.png), пользователь может перемещаться по слайд-шоу с помощью кнопок "Далее" и "Предыдущий".

Пользователь всегда запускает слайд-1.png, через 5 секунд пользователь нажимает кнопку "Далее" и переходит на слайд-2.png. Через 10 секунд пользователь нажал "Предыдущий", чтобы вернуться назад, и остался там на 5 секунд.

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

Пользователь не переходит на новую html-страницу после нажатия "Далее"/"Назад". Это просто изображения, изменяющие информацию SRC.

Любые идеи о том, как я должен подходить к этому? В настоящее время я использую PHP, Javascript и Java в своем веб-приложении.

2 ответа

Функция JavaScript, которая циклически повторяется и "нюхает" заданные вами условия, лучше всего подойдет для этого сценария. Подход, который вы должны использовать, - назначить каждому.png свой собственный атрибут ID. Создайте переменные с помощью JavaScript и jQuery, которые специально предназначены для каждого изображения. Затем прикрепите к слайд-шоу событие mousedown или click, которое определит, какое изображение является видимым, и активирует таймер для этого конкретного изображения. Конечно, вам понадобятся поля ввода, скрытые на странице для каждого изображения, в которое будет увеличиваться счетчик.

В ссылке вы увидите похожую функциональность, благодаря которой, когда пользователь нажимает на компонент "увеличение", запускается таймер. Он остановится только тогда, когда пользователь нажмет на изображение.

Функция JavaScript - это вызов setInterval(), который можно остановить с помощью clearInterval(). Для достижения наилучших результатов создайте функцию setInterval() в качестве переменной.

Пример переменной:

var firstSlide = jQuery('img#slide1');

Образец условия 01:

if (firstSlide.length > 0)
{
    //start counter with setInterval();
}

Пример условия 02:

if (firstSlide.is(':visible'))
{
    //start counter with setInterval();
}

Чтобы обеспечить минимальное перекрытие таймера и обеспечить более строгое поведение, я бы предложил применить уникальный класс CSS к контейнеру слайд-шоу, когда он виден при нажатии, и удалить его, когда он не виден.

Образец Условие 03:

slideShow.click( function() {
slideShow.addClass('isClicked');
});
if (firstSlide.is(':visible') && jQuery('slideShow.isClicked').length > 0)
{
    //start counter with setInterval();
}

http://www.alexldixon.com/clicktimerhelp.htm

Другой пример, в котором setInvertval может "анализировать" динамические условия, - выравнивание высоты элементов даже при изменении размеров окна и переноса текста.

https://jsfiddle.net/dixalex/ojoevj1k/

var makeSameHeight = setInterval( function() {
    var currentTextHeight = $('div.myClass-content').height() + "px";
    var imgDivHeight = $('div.imgUrl').height() + "px";
    if (currentTextHeight === imgDivHeight)
    {
        var doNothing = "";
    } else {
        $('div.imgUrl, div.postImageUrl, a.myClass').css("height", currentTextHeight);
    }
}, 50);

Наконец, вы также можете использовать новую функцию Date().

Надеюсь, это поможет.

Вы захотите зафиксировать время, когда они начнут просматривать слайд:

var startTime = new Date();

Затем запишите время, когда слайд исчезнет:

var endTime = new Date();

Затем вы можете рассчитать прошедшее время.

var elapsed = endTime - startTime; // elapsed time in milliseconds

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

setTimeout(function () {
  endTime = 'Timed out.';
}, ((3 * 60) * 60) * 1000); // ((3hrs * 60mins) * 60secs) * 1000ms

Через 3 часа он установит endTime в 'Timed out.' и вы можете использовать это, чтобы знать, что пользователь отошел от этого конкретного слайда и не завершил просмотр остальных.

Другие вопросы по тегам