Добрый день.
Есть скрипт собирающий события мыши (координаты, клики, скроллы горизонтальный и вертикальный).
Объявляю глобальную переменную массив listClick.
Далее в одной функции этот массив наполняется ассоциативными массивами (словарями событий кликов). Функция срабатывает на событие клика ( document.addEventListener('click', function() {clickTracker(te='cl');}); ).
В другой функции, срабатывающей по таймеру ( setInterval(PushAllArray, 5000) ), этот массив (listClick) складывается в другой словарь (allEvent), и после этого должен обнулиться, но этого не происходит.
В отправленных событиях я вижу, что данные остаются, очень интересным для меня способом.
Например, в словаре allEvent сохранилось и отправилось 5 кликов, дальше делаю еще 2 клика и они затирают из этих 5 первые 2, но 3 остаются и определить их можно по дельте времени.
(function() {
var listClick = [];
var pos = { x: null, y: null, t:null };
var posClick = { x: null, y: null };
var st = +new Date();
var be, dt, touch = null;
function getPosition(e) {
var posx = 0;
var posy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY) {
posx = e.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
posy = e.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
};
posx = (posx - posx % 10)/10;
posy = (posy - posy % 10)/10;
dt = (+new Date) - st;
pos = { x: posx, y: posy, dt: dt };
return pos
};
function clickTracker() {
getPosition();
if (!e) var e = window.event;
button = e.which
dt = (+new Date) - st;
var targetClass = e.target.className;
var targetTagName = e.target.tagName;
var targetTagId = e.target.id;
if (targetTagId != false) {
elem = targetTagId;
} else if (targetClass != false) {
elem = targetClass;
} else if (targetTagName != false) {
elem = targetTagName;
} else {
elem = 0;
};
if (pos.x != null && pos.y != null) {
posClick = { "x": pos.x, "y": pos.y, "b": button, "te": te, "e": elem, "dt": dt };
};
listClick.push(posClick);
return listClick;
};
function PushAllArray() {
var allEvent = {'session': {'c':null}, 'spl':null};
var session = {'c':null};
//console.log('listClick', listClick)
if (listClick.length != 0 && listClick != null) {
allEvent['session']['c'] = listClick;
};
allEvent['spl'] = st;
if (allEvent['session']['c'] != null) {
console.log(allEvent['session']['c'][0]) // сначала кликаем 2 раза на 2 разных элемента, они отображаются в консоли,
console.log(allEvent['session']['c'][1]) // через интервал времени кликаем 1 раз на другой элемент и он перетирает только первую запись.
// tracker.send(); отправка на сервер.
// к сожалению из консоли все работает как надо, а при установке этого скрипта на сайт, работает как описано.
};
listClick.length = 0;
// опробованные варианты обнуления
// listClick = [];
// в цикле listClick.pop
};
var timerPushAllArray = setInterval(PushAllArray, 5000);
window.onbeforeunload = PushAllArray;
document.addEventListener('click', function() {
clickTracker(te='cl');
});
})()
Вопрос в том как сделать так чтобы при итерациях по интервалу времени переменная listClick обнулялась?
Возможно я в целом что то делаю не так и надо в целом по другому сделать.