Не останавливается таймер
Доброго времени суток!
Появилась необходимость написать плагин под jQuery, но я в js абсолютный новичок. Суть плагина: с определенной периодичностью собираются данные о положении курсора и времени, которое он там находится. И так же с определенной периодичностью отправляются ajax-запросы на сервер. Положение курсора рассчитывается относительно объекта. Суть вопроса: Плагин может работать только с одним объектом. В примере ниже при наведении на '#test2' все сломается. Если убрать курсор с дива то таймеры все еще будут работать. Что с этим делать ума не приложу. :help: Если появятся замечания к коду, буду рад выслушать что-где неправильно написал. <div id="test1" class="border"> <div id="test2" class="border"></div> </div> $('border').trackCoords({url: 'main.php'}).addClass('check'); Сам плагин ;(function ($) { var defaultOptions = { checkInterval: 30, sendInterval: 3000, url: '' }; $.fn.trackCoords = function (option) { var options = $.extend({}, defaultOptions, option), element = this, data = [], checkTimerId, sendTimerId; element.mouseover(function (event) { var pos = $(event.target).offset(), timeTrackStart = $.now(), posX = 0, posY = 0; /** * При перемещении курсора в переменных сохраняются его координаты и время, начиная * с которого он в них находится. */ element.mousemove(function (e) { posX = e.pageX - pos.left; posY = e.pageY - pos.top; timeTrackStart = $.now(); }); /** * Таймер с определенным интервалом записывает в массив с данными координаты курсора * и высчитаное время нахождения курсора в них */ checkTimerId = setInterval(function() { data.push({ x: posX, y: posY, time: $.now() - timeTrackStart }); }, options.checkInterval); /** * Таймер с определенным интервалом отправляет данные по икузанному 'url' */ sendTimerId = setInterval(function () { $.ajax({ url: options.url, type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify(data) }) .fail(function (jqXHR) { console.log('Error: (' + jqXHR.status + ') ' + jqXHR.statusText); } ); data = []; }, options.sendInterval); }); element.mouseout(function () { clearInterval(checkTimerId); clearInterval(sendTimerId); data = []; }); return element; }; }(jQuery)); |
chester123,
10 строка return this.each(function(indx, element) { тут всё }) |
Большое спасибо. Написал, вроде все работает.
|
Часовой пояс GMT +3, время: 06:38. |