Nickolay.info. Javascript. Динамическая смена фонового цвета документа с шагом по времени

Серверное программирование для этой задачи не нужно, достаточно Javascript. Для простоты будем менять цвет от белого к чёрному, начав сразу же после загрузки страницы (вызов функции change_bg по событию onload тега <body>). Разумеется, можно иначе организовать работу функции change_bg и получить другой эффект.

Сначала попробуем упрощённую версию скрипта, предполагающую, что браузер сможет получить цвет RGB с помощью соответствующего стилевого указания rgb:

<HTML>
<HEAD>
<TITLE>Динамическая смена фона</TITLE>
<script type="text/javascript"> 
 function change_bg (x) {
  if (x<256) {
   var z=255-x;
   document.bgColor='rgb('+z+','+z+','+z+')';
   x+=2;
   window.setTimeout("change_bg("+x+")",100);
  }
 }
</script>
</HEAD>
 
<body onload="change_bg(0)">
</body>
</HTML>

Если скопировать этот документ в файл с расширением .html и запустить в браузере, мы увидим, как фоновый цвет документа постепенно меняется с белого на чёрный. "Шаг" изменения равен 2 (оператор x+=2), а каждое изменение делается через 100 миллисекунд (параметр 100 в вызове window.setTimeout), при желании эти числа можно поменять.

В IE и Google Chrome это отработает корректно, в новом ТорMozilla Firefox 6 будут дикие мерцания и наложения цвета, в "жОпере" фон изначально будет зелёным - похоже, эти браузеры не понимают записи rgb, ведь таймаут в 100 миллисекунд - достаточно большой, да и смена его на 250 не помогла.

Придётся написать пару недостающих функций самостоятельно, тогда получим код, который сработал во всех 4 указанных выше браузерах:

<HTML>
<HEAD>
<TITLE>Динамическая смена фона</TITLE>
<script type="text/javascript"> 
 var hexNum=new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
 function toHex(num) {
  if (num<0) return "00";
  else if (num>255) return "FF";
  else return ""+hexNum[Math.floor(num/16)]+hexNum[num%16];
 }
 function newBgcolor(red,green,blue) {
  var hexRed=  toHex(red);
  var hexGreen=toHex(green);
  var hexBlue= toHex(blue);
  document.bgColor="#"+hexRed+hexGreen+hexBlue;
 }
 function change_bg (x) {
  if (x<256) {
   var z=255-x;
   newBgcolor(z,z,z);
   x+=2;
   window.setTimeout("change_bg("+x+")",100);
  }
 }
</script>
</HEAD>
 
<body onload="change_bg(0)">
</body>
</HTML>

Здесь функция newBgcolor ставит фоновый цвет документа, заданный десятичными числами-параметрами red, green и blue. Служебная функция toHex(num) переводит десятичное число num со значением от 0 до 255 включительно в его шестнадцатеричную запись.

P.S. Статья устарела, в новых браузерах всё проще.

Рейтинг@Mail.ru

вверх гостевая; E-mail