Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2017, 14:29
Новичок на форуме
Отправить личное сообщение для chester123 Посмотреть профиль Найти все сообщения от chester123
 
Регистрация: 14.10.2017
Сообщений: 2

Не останавливается таймер
Доброго времени суток!
Появилась необходимость написать плагин под jQuery, но я в js абсолютный новичок.
Суть плагина: с определенной периодичностью собираются данные о положении курсора и времени, которое он там находится. И так же с определенной периодичностью отправляются ajax-запросы на сервер. Положение курсора рассчитывается относительно объекта.

Суть вопроса: Плагин может работать только с одним объектом. В примере ниже при наведении на '#test2' все сломается. Если убрать курсор с дива то таймеры все еще будут работать. Что с этим делать ума не приложу.
Если появятся замечания к коду, буду рад выслушать что-где неправильно написал.

<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));
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2017, 16:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

chester123,
10 строка
return this.each(function(indx, element) { тут всё })
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2017, 16:57
Новичок на форуме
Отправить личное сообщение для chester123 Посмотреть профиль Найти все сообщения от chester123
 
Регистрация: 14.10.2017
Сообщений: 2

Большое спасибо. Написал, вроде все работает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индивидуальный таймер обратного отсчета времени с редиректом pozitiv4ek Работа 2 11.12.2016 13:42
Таймер на вкладках в Хроме. YNA Opera, Safari и др. 1 28.01.2016 02:43
помогите чтобы таймер тикал Руслан904322 Общие вопросы Javascript 1 22.02.2015 12:43
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Как сделать таймер как в САР? jelome Элементы интерфейса 0 27.06.2011 12:40