Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2013, 17:01
Интересующийся
Отправить личное сообщение для Kosty@n Посмотреть профиль Найти все сообщения от Kosty@n
 
Регистрация: 14.04.2009
Сообщений: 17

Синхронизировать события по setInterval
Здравствуйте, уважаемые пользователи.
У меня на странице в разное время запускаются функции setInterval, которые реализуют мигание некоторых объектов на странице.
Как синхронизировать работу этих setInterval'ов?

Пример кода.
setInterval(function() {
        play();
} , 500);

function play() {

            for (obj in Example[iter]) {
                 //здесь что-то происходит
            }
            iter += 1;

}


Помогите интеллектом, кто сколько может
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2013, 17:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Kosty@n,
Присваивайте id каждому setInterval

var IntervalID_N;
IntervalID_N = setInterval(function() {});

clearInterval(IntervalID_N) //Удаление;


http://javascript.ru/setInterval
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2013, 18:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Kosty@n
Как синхронизировать работу этих setInterval'ов?
1. Запускаете общий синхронизующий таймер, к примеру через 0.5 сек,
В массив arrFunk добавляете/удаляете нужные функции
function F1(a) {
   alert('function F1:  =  '+a);
}
function F2(a) {
   alert('function F2:  =  '+a);
}

var arrFunk=[F1,'a',F2,'B'];//массив запускаемых функций и параметров
IntervalID_N = setInterval(function() {
for(var i=0; i<arrFunk.length; i+=2){
   arrFunk[i](arrFunk[i+1]);
}
},2500);


setTimeout('arrFunk.splice(0, 2)',4000);//Удаляем 1-ю функцию с параметром;


//Добавим новую функцию с параметром;
setTimeout("arrFunk.push(F1,'ccc')",4100);

Последний раз редактировалось Deff, 17.01.2013 в 19:24.
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2013, 19:16
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Kosty@n Посмотреть сообщение
Здравствуйте, уважаемые пользователи.
У меня на странице в разное время запускаются функции setInterval, которые реализуют мигание некоторых объектов на странице.
Как синхронизировать работу этих setInterval'ов?

Пример кода.
setInterval(function() {
        play();
} , 500);

function play() {

            for (obj in Example[iter]) {
                 //здесь что-то происходит
            }
            iter += 1;

}


Помогите интеллектом, кто сколько может
сюда отлично подойдёт реализация requestAnimationFrame для браузеров, которые не имеют реализации оной

только что заметил, что тут не хватает нескольких функций \ переменных, но я думаю, что их название говорит само за себя.

идея в том, чтобы собрать функции в массив, а потом через время ( 1000 / 60 ) обойти этот массив и каждой передать одинаковую метку времени - Date.now().

// ....................................
    /**
     * Вернёт кол-во миллисекунд с 1 Января 1970 00:00:00 UTC
     * @return {number}
     */
    var now = Date.now || function () {
        return +new Date;
    };

    /**
     * Замена для requestAnimationFrame.
     * @param {function(number)} callback
     * @return {number} ID таймаута
     */
    function rAF_imitation(callback) {

        var id = rAF_imitation.unique++,

            info = {
                id:id,
                func:callback
            };

        if (!rAF_imitation.timerID) rAF_imitation.timerID = setInterval(rAF_imitation.looper, 1e3 / FRAMES_PER_SECOND);

        rAF_imitation.queue.push(info);
        return id;
    }

    /**
     * Замена для cancelRequestAnimationFrame
     * @param {number} id
     */
    function rAF_imitation_dequeue(id) {

        var index, queue, eq;

        eq = function (/**@type {{id: number, func: Function}}*/val) {
            return val.id === id;
        };
        queue = rAF_imitation.queue;
        index = LinearSearch(/**@type {Array}*/(queue), eq);
        if (index !== -1) {
            // don't splice
            queue[index] = null;
        }
    }

    /**
     * ID таймаута "перерисовки"
     * @type {number}
     * @private
     */
    rAF_imitation.timerID = null;

    /**
     * Для генерации ID таймаута.
     * @type {Number}
     */
    rAF_imitation.unique = 0;

    /**
     * Очередь обработчиков и их контекстов
     * @type {Array.<{func: Function, id: number}>}
     * @const
     */
    rAF_imitation.queue = [];

    /**
     * Таймер "отрисовки" - пройдется по обработчикам и повызывает их,
     * передав как первый аргумент временную метку "отрисовки"
     * @private
     */
    rAF_imitation.looper = function () {
        var reflowTimeStamp = now(), queue = rAF_imitation.queue, info;
        while (queue.length) {
            info = queue.pop();
            info && info.func.call(window, reflowTimeStamp);
        }
    };

Последний раз редактировалось melky, 17.01.2013 в 19:19.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание глобального события kez jQuery 1 17.09.2012 11:49
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 14:44
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26