Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи мови JavaScript.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.04 Mб
Скачать

5.2. Динамічна заміна растровых зображень

Одна з найбільше цікавих можливостей, доступних при використанні сценаріїв JavaScript, полягає в динамічній заміні графічних зображень, зазначених у параметрі SRC оператора <IMG>.

Наприклад, у такому рядку сценарію JavaScript указується, що зображення з ім'ям btnl повинно мати адресу URL pic/aurap. gif:

document. btnl. src="pic/aurap. gif"

Тут зазначена неповна адреса URL, проте можна вказувати і повну адресу.

Що відбудеться при виконанні приведеної вище рядка сценарію? Область, виділена у вікні браузсра для растрового зображення btnl, буде заповнена зображенням pic/aurap.gif. Якщо до цього там було інше зображення, воно буде замінено на нове.

Як можна скористатися динамічною заміною растровых зображень?

По-перше, ви можете створювати графічні посилання, що змінюють свій вид, коли над ними знаходиться курсор миші. По-друге, за допомогою заміни растровых зображень у сценарії JavaScript можна створювати анімаційні зображення.

Роздивимося приклади сценаріїв, що вирішують зазначені задачі.

5.2.1. Зміна зовнішнього вигляду графічних посилань

У документі HTML знаходяться дві кнопки, створені як растровые графічні зображення. Вони використовуються для активізації посилань, що відповідають двом іншим документам HTML.

Якщо розташувати курсор над однієї з цих кнопок, напис на цій кнопці змінить свій цвіт. Це досягається динамічною заміною графічного зображення кнопки за допомогою сценарію JavaScript.

Вихідний текст документа HTML показаний у листинге 5.1.

Листинг 5.1. Файл chapter5/grbutton/grbutton. html

<HTML>

<BODY BGCOLOR="#BOFFD8">

<FONT FACE="Arial, Helvetica" SIZE=1>

<P>

<A HREF="mainaur.htm"

onMouseOver="document.btnl.src='pic/aurap.gif'"

onMouseOut="document.btnl.src='pic/aura.gif'">

<IMG SRC="pic/aura.gif" NAME = "btn1" BORDER=0 АLТ="Часопис Аурамедиа"</А> <BR> <A HREF="soft/default.htm"

onMouseOver="document.btn2.src='pic/softcatp.gif'"

onMouseOut="document.btn2.src='pic/softcat.gif'">

<IMG SRC="pic/softeat.gif" NAME = "btn2" BORDER=0 ALT="Soft-каталог"</А>

</LEFT>

</FONT>

</BODY>

</HTML>

Для створення посилань використовується оператор <А> разом з оператором <IMG>, тому посилання відображається як графічне зображення.

Для оператора посилання <А> визначені оброблювачі подій onMouseOver і onMouseOut:

onMouseOver="document. btnl. src='pic/aurap. gif'"

onMouseOut="document. btnl. src='pie/aura. gif'"

Коли курсор миші надається над посиланням (тобто над графічним зображенням посилання), керування одержує оброблювач події onMouseOver. Цей оброблювач завантажує зображення pic/aurap. gif, де слово АУРАМЕДИА написано червоним цвітом (для другої кнопки в аналогічній ситуації завантажується зображення pic/softcatp. gif).

Після того як користувач прибирає курсор миші з поверхні кнопки, у справу включається оброблювач події onMouseOut. Він відновлює вихідне зображення, зазначене в параметрі SRC оператора <IMG>.

5.2.2. Створення анімаційних зображень

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

Нижче показаний документ HTML, у якому використовується така анимация.

У вікні браузера послідовно відображаються кадри анімаційного зображення (мал. 5.3), причому спочатку в прямой, а потім в оберненій послідовності. Це виглядає так, начебто слово Noise періодично тоне в кольоровому шумі і потім виявляється знову. Зауважимо, що схожий ефект вже одержували цілком іншими засобами в аплете Java вихідний текст якого був опублікований у часопису "Світ ПК", N.1 за 1998 рік.

Також звернемо увагу на те, що для досягнення подібного ефекту за допомогою многосекционного файла GIF розмір цього файла було б необхідно подвоїти. Причина цього полягає в тому, що прийшлося б включити у файл кадри спочатку в прямой, а потім в оберненій послідовності. Сценарій JavaScript дозволяє більш тонко управляти процесом відображення кадров, що можна використовувати для досягнення достатньо складних візуальних ефектів щодо простими засобами.

Вихідний текст документа HTML, у якому є сценарії, що виконує анимацию, показаний у листинге 5.2.

Листинг 5.2. Файл chapter5/noise/noise. html

<HTML>

<HEAD>

<TITLE>Animation with JavaScript</TITLE>

<SCRIPT LANGUAGE="JavaScript">

<!--

var i=1;

var bForward=true;

function showNextImage()

{

if(bForward)

{

if(i > 17)

{

bForward=false;

}

}

else

{

i--;

if(i < 2)

{

bForward=true;

}

}

document.Img.src= "img0" + i + ".gif";

setTimeout("showNextImage()", 100);

}

//-->

</SCRIPT>

</HEAD>

<BODY BGCOLOR=white>

<IMG SRC="img01.gif" NAME="Img">

<SCRIPT LANGUAGE="JavaScript">

<!--

showNextImage();

//-->

</SCRIPT>

</BODY>

</HTML>

У тілі документа за допомогою оператора <IMG> розміщений перший кадр анімаційної послідовності:

<IMG SRC="img01. gif" NAME="Img">

За допомогою параметра NAME задане ім'я Img. Це ім'я буде використано сценарієм JavaScript для посилання на об'єкт.

Крім того, у тілі нашого документа знаходиться виклик функції showNextImage. Дана функція призначена для відображення чергового кадру анімаційної послідовності.

У області заголовка документа HTML знаходиться визначення функції showNextImage і двох глобальних перемінних:

var i=1;

var bForward=true;

Перемінна i береже номер поточного кадру, відображуваного у вікні браузера. Цей номер спочатку збільшується функцією showNextImage від 1 до 16, а потім знову зменшується до 1. Зміна номера відбувається на одиницю (у ту або іншу сторону) при кожному виклику функції showNextImage.

У перемінної bForward зберігається напрямок зміни номера кадру Значення true відповідає прямому напрямку, а значення false - оберненому.

Коли функція showNextImage одержує керування, вона аналізує вміст перемінної bForward. Якщо в цей перемінної знаходиться значення true, функція showNextImage збільшує значення перемінної i а потім порівнює результат із числом 17. Коли відображення всіх кадров у прямої послідовності завершено, у перемінну bForward записується false, після чого при такому виклику функції showNextImage номер поточного кадру буде не збільшуватися, а зменшуватися.

Для відображення чергового кадру функція showNextImage змінює значення властивості src зображення document. Img, як це показано нижче:

document. Img. src= "img0" + i + ". gif";

Ім'я файла, у якому зберігається зображення кадру, конструируется з рядка "img0", номера кадру і рядки ". gif".

Останнє, що робить функція showNextImage перед тим, як повернути керування, - викликає функцію setTimeout:

setTimeout("showNextImage()", 100);

Функція setTimeout установлює таймер. Затримка спрацьовування таймера визначається другим параметром і в нашому випадку дорівнює 100 мс.

Коли таймер спрацює, буде запущена на виконання рядок сценарію JavaScript, що була передана функції setTimeout у якості першого параметра. Після закінчення затримки визивається функція showNextImage і в такий спосіб забезпечується виклик цієї функції в безкінечному циклі.