PDA

Просмотр полной версии : setInterval(). есть вопросы.


netstuff
17.06.2005, 19:31
итак. начнем из далека.
используецца setInterval() в различных частях мувика.
причем в такой форме:

var mcInterval = setInterval(function(), args);

вопрос: можно ли как-то получить все интервалы? в виде массива или ещё как? чтобы, например, всех их обнулить (удалить). разом. без сомнений и без колебаний ;)

DOG-Paul
17.06.2005, 19:36
а ты их называй какнить intrval1, interval2 и т.д. и потом циклом их очисть...

artfla$her
17.06.2005, 19:45
Сходу могу предложить только вариант с массивом, куда заносить все эти интервалы. Собственно, то же, что и сказал DOG-Paul.
А что, этих интервалов так много?

netstuff
17.06.2005, 19:48
да неееее. как надо было сделать - эт понятно.
теперь хочецца малой кровью ошибки молодости исправить :D :D :D

думал, может как-нибудь через прототип. да вот не доезжаю никак.
будем ждать кого поумней :eek:

Король
17.06.2005, 19:51
как-нибудь через прототип? это ты что имел в виду?

netstuff
17.06.2005, 20:24
как-нибудь через прототип? это ты что имел в виду?

ну вот, например, можем же мы сделать так:

MovieClip.prototype.traceName = function() {
trace(this._name);
}

вот и думаю, а вдруг можно обратицца к прототипу setInterval()? яч бы тогда добавил к нему функцию globalDelete() и попробовал бы как-нибудь прикрутить.

Штрек
17.06.2005, 23:22
Есть такая фишка -
централизация кода....
В таком разе всё достаточно просто
/если в руте нет числовых переменных
или сделать пустой мув из которого вызывать sI.../

_root.arr_id = [];
mInterval = setInterval(function () {
}, 500);
mcccccInterval = setInterval(function () {
}, 1000);
for (n in _root) {
if (typeof _root[n] == "number") {
_root.arr_id.push(n);
}
}
trace(_root.arr_id);

iNils
18.06.2005, 01:01
Придумал. Сыровато, и есть что еще добавить полного использования, но суть сама понятна.

Основной код:
/*
Переписываем фунцкию setInterval
*/
_global.setInterval = function () {
if (!_global.setInterval.interval) {
_global.setInterval.interval = new Array ();
_global.clearIntervalAll = function () {
for (arg in _global.setInterval.interval) {
clearInterval (_global.setInterval.interval[arg]);
}
};
}
_global.setInterval.interval[_global.setInterval.interval.length] = ASnative (250, 0).apply (_global, arguments);
};


Пример (добавить к основному коду):
/*
Создаем две фунцкии, которые будем вызвать с помощью setInterval
*/
u = function () {
trace ("U " + getTimer ());
};
u2 = function () {
trace ("U2 " + getTimer ());
if (getTimer () > 3000) {
clearIntervalAll ();
}
};
setInterval (u, 500);
setInterval (u2, 100);


Вызывая clearIntervalAll (), мы останавливаем все запущенные setInterval.

derhab
18.06.2005, 04:00
Вот тоже вариант, заносим все интервалы в пустой массив, потом в нужный момент всё разом очищаем:


var intervals_array = [];
intervals_array.push(id2=setInterval(function () {
trace("interval№1");
}, 30));
intervals_array.push(id=setInterval(function () {
trace("interval№2");
}, 30));
intervals_array.push(id3=setInterval(function () {
trace("interval№3");
}, 30));
//стираем все интервалы через 5 сек.

id_check = setInterval(function () {
for (i=0; i<intervals_array.length; i++) {
clearInterval(intervals_array[i]);
}
}, 5000);

silin
19.06.2005, 23:09
к идее iNils:
вроде бы ничего не мешает обойтись только счетчиком
_global.setInterval = function () {
_global.setInterval.num+=1;
ASnative (250, 0).apply (_global, arguments);
};

_global.clearIntervalAll=function(){
for(var i=1;i<=setInterval.num;i++)clearInterval(i);
}

derhab
21.06.2005, 23:45
к идее iNils:
вроде бы ничего не мешает обойтись только счетчиком

Кажется, в отличие от варианта iNils оно не работает...по крайней мере у меня.

silin
22.06.2005, 00:15
что значит кажется ?
в каком контексте не работает, надо ж узнать где грабли

artfla$her
22.06.2005, 17:38
_global.setInterval = function ()
{
_global.setInterval.num = _global.setInterval.num ? _global.setInterval.num + 1 : 1;
ASnative (250, 0).apply (_global, arguments);
};

Так тоже не работает?