Я работаю над плагином jQuery (виджетом пользовательского интерфейса jQuery) под названием Smooth Div Scroll , где мне нужно хранить ссылки на интервалы, характерные для каждого отдельного экземпляра плагина на странице.Если я просто напишу что-то вроде этого:
var myInterval = setInterval(function() {
alert("Hi!");
}, 100);
... переменная myInterval будет на самом деле window.myInterval и будет использоваться все экземпляры плагина на странице.Поэтому, когда я пытаюсь установить или очистить интервал для экземпляра, интервал для всех экземпляров будет установлен / очищен, поскольку все они ссылаются на одну и ту же переменную окна.
Просматривая jQuery API, я нашел метод .data , который используется для хранения произвольных данных, связанных с сопоставляемыми элементами, и так как каждый экземпляр плагина имеет соответствующий элемент DOM.Отлично!Используя этот метод, я могу хранить данные, относящиеся к соответствующему элементу.Поэтому я структурировал свой код следующим образом (где el - это ссылка на соответствующий элемент):
el.data("myInterval", setInterval(function() {
alert("Hi!");
}, 100));
В некоторой степени это работает, поскольку различные экземпляры плагина больше не ссылаются на одну и ту же переменную (интервал),Но я заметил, что если у меня есть страница с 2-3 экземплярами моего плагина и я устанавливаю одинаковый интервал для каждого экземпляра, только первый экземпляр начинает свой интервал.Но если таймер интервала небольшой, только некоторые элементы начинают свой интервал.
Я не делал глубоких копий в реальных значениях, но если у меня есть три экземпляра плагина на одной странице, и интервал установлен на 5, например:
el.data("myInterval", setInterval(function() {
alert("Hi!");
}, 5));
... только первый экземпляр будет запущен.Если я увеличу его до 20-30, запустятся два экземпляра, и если я увеличу его, скажем, до 50, начнутся все три экземпляра.Это так странно?!
У меня такие вопросы:
Является ли сохранение ссылки на интервал (с использованием .data) хорошей идеей?Если так, что может быть причиной неудачных интервалов?
Пожалуйста, помогите мне с этим - я в тупике!Если вам нужен реальный исходный код, проверьте страницу плагина (ссылка вверху этого поста).
/ Thomas Kahn