2013-12-14 2 views
0

Im меняет фон страницы от белого до черного, следуя последовательности 1 и 0. В настоящий момент мне удается заставить его работать, если черно-белый фон меняется с той же задержкой:Время и задержки на javascript

var syncinterval = setInterval(function(){ 
    bytes = "10101010101010101010101010101010101010101010101010101010101010101"; 

    bit = bytes[i]; 
    output_bit(bit); 

    i += 1; 
    if (i > bytes.length) { 
     clearInterval(syncinterval); 

     i = 0; 
     for (i=0; i < input.length; i++) { 
      tbits = input[i].charCodeAt(0).toString(2); 
      while (tbits.length < 8) tbits = '0' + tbits; 
      bytes += tbits; 
     } 
     console.log(bytes); 
    } 
}, sync_speed); 

Полная рабочая демонстрация: http://jsfiddle.net/kn48Z/

Как я могу изменить функцию, чтобы сделать белый фон последнего для sync_speed секунд и черный фон для другого любого значения?

+2

Спасибо за демо, у меня просто был приступ. – j08691

+1

Эта демонстрация опасна для людей, страдающих эпилепсией, только FYI. Шутки в сторону. – Sergio

+2

Вместо этого используйте рекурсивную funtion и установите тайм-аут на основе цвета – adeneo

ответ

0

Если я понимаю, что вы пытаетесь сделать, попробуйте поместить свой код в отдельную функцию и используйте setTimeout. Это даст вам больше контроля над тем, что вы пытаетесь выполнить.

Я немного изменил ваш код. Я проверяю, есть ли бит 1 (который я предполагаю белый), если он есть, он будет запускать backgroundOrSom в течение секунд sync_speed. Если это не так, он запустит backgroundOrSomчто в otherTime. Я установил otherTime на 1 секунду, только для хихиканья.

function backgroundOrSomething(){ 
    bytes = "10101010101010101010101010101010101010101010101010101010101010101"; 

    bit = bytes[i]; 
    output_bit(bit); 

    i += 1; 
    if(i > bytes.length) { 
     i = 0; 
     for (i=0; i < input.length; i++) { 
      tbits = input[i].charCodeAt(0).toString(2); 
      while (tbits.length < 8) tbits = '0' + tbits; 
      bytes += tbits; 
     } 
     console.log(bytes); 
    } 

    otherTime = 1000; 

    if (bit == 1) 
     setTimeout(backgroundOrSomething, sync_speed); 
    else 
     setTimeout(backgroundOrSomething, otherTime); 
} 

setTimeout(backgroundOrSomething, sync_speed); 

Последний наборTimeout в нижней части кода будет первым, выполнившим backgroundOrSomething.

0

Как и выше вам нужно использовать заданный интервал следующим образом:

var bit = 0; 
var syncInterval = setInterval(function() { 
    document.body.style.backgroundColor = bit == 0 ? 'black' : 'white'; 
    bit = 1; 
}, 3000); 

var stopInterval = setTimeout(function() { 
    clearInterval(syncInterval); 
}, 50000); 

скрипку здесь http://jsfiddle.net/kn48Z/4/. Обратите внимание на замедленный переключатель фона, чтобы он соответствовал.

Смежные вопросы