русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ненавязчивая смена изображений


Дата добавления: 2015-07-09; просмотров: 474; Нарушение авторских прав


 

Только что продемонстрированный фрагмент содержит один тег <script> и два атрибута обработчиков событий с JavaScript_кодом, чтобы реализовать единст_ венный эффект смены изображений. Это прекрасный пример навязчивого Java_ Script_кода. Хотя примеры смешения представления (HTML_разметка) с поведе_ нием (JavaScript_код) встречаются не так уж редко, лучше избегать такой прак_ тики, если такая возможность есть. Особенно в случаях, когда JavaScript_код за_ трудняет понимание HTML_кода. В примере 22.1 приводится функция, которая добавляет эффект смены изображений к указанному элементу <img>.

Пример 22.1. Добавление эффекта смены изображений

/**

* Добавляет эффект смены изображений к заданному тегу <img>, вставляя обработчики

 

* событий, которые будут изменять URL_адрес изображения при наведении указателя мыши.


 

550 Глава 22. Работа с графикой на стороне клиента

*

* Если аргумент img содержит строку, выполняется поиск элемента

* по значению атрибута id или name.

 

*

* Это метод устанавливает свойства обработчиков событий onmouseover

* и onmouseout в указанный элемент, перекрывая и отключая любые обработчики,

* определенные в этих свойствах ранее.

*/

function addRollover(img, rolloverURL) {

if (typeof img == "string") { // Если img _ это строка,

var id = img; // значит, это id, а не объект Image

img = null; // и потому у нас еще нет объекта.

 

// Прежде всего, необходимо отыскать изображение по атрибуту id if (document.getElementById) img = document.getElementById(id); else if (document.all) img = document.all[id];

 

// Если по атрибуту id отыскать не удалось, попробовать отыскать

 

// по атрибуту name.

if (!img) img = document.images[id];

 

// Если не удалось найти изображение, ничего не делать и тихо выйти if (!img) return;



}

 

// Если элемент найден, но это не тег <img>, также ничего больше не делать if (img.tagName.toLowerCase() != "img") return;

 

// Запомнить первоначальный URL_адрес изображения

var baseURL = img.src;

 

// Загрузить сменное изображение в кэш броузера (new Image()).src = rolloverURL;

 

img.onmouseover = function() { img.src = rolloverURL; } img.onmouseout = function() { img.src = baseURL; }

 

}

 

Функция addRollover(), объявленная в примере 22.1, «не совсем» ненавязчивая, потому что для ее использования по_прежнему требуется включать в HTML_код сценарий, который вызывал бы эту функцию. Для достижения поставленной це_ ли – сделать реализацию эффекта смены изображений по_настоящему ненавяз_ чивой – необходимо каким_то образом без JavaScript_кода указать, какие изо_ бражения должны меняться, и задать URL_адреса сменных изображений. Са_ мый простой способ – включить в теги <img> ложные атрибуты. Например, изо_ бражение с эффектом смены можно обозначить так:

<img src="normalImage.gif" rollover="rolloverImage.gif">

 

Используя такое соглашение по оформлению изображений, можно без труда оты_ скать все изображения, которые должны меняться, и настраивать реализацию эффекта с помощью функции initRollovers() – ее определение приводится в при_ мере 22.2.

 

Пример 22.2. Добавление эффектов смены изображений ненавязчивым образом

/**

* Находит все теги <img> в документе, которые имеют атрибут "rollover".


 

22.1. Работа с готовыми изображениями
   

 

* Значение этого атрибута используется как URL_адрес сменного изображения,

* выводимого, когда указатель мыши наводится на изображение;

* устанавливает соответствующие обработчики событий, с помощью

* которых воспроизводится эффект смены изображений.

*/

function initRollovers() {

 

var images = document.getElementsByTagName("img"); for(var i = 0; i < images.length; i++) {

var image = images[i];

 

var rolloverURL = image.getAttribute("rollover"); if (rolloverURL) addRollover(image, rolloverURL);

 

}

}

 

Все, что осталось сделать, – это гарантировать запуск метода initRollovers() по_ сле загрузки документа. Следующий программный код должен работать в совре_ менных броузерах:

 

if (window.addEventListener) window.addEventListener("load", initRollovers, false);

 

else if (window.attachEvent) window.attachEvent("onload", initRollovers);

 

Более подробное обсуждение обработчика события onload вы найдете в главе 17.

 

Обратите внимание: если объединить функции addRollover() и initRollovers() в одном файле с программным кодом, выполняющим регистрацию обработчика события, получится полностью ненавязчивое решение по реализации эффекта смены изображений. Все, что необходимо для получения эффекта смены изобра_ жений, –просто подключить получившийся файл с программным кодом в теге <script src=> и вставить атрибут rollover в необходимые теги <img>.

 

Если необходимо соблюсти строгое соответствие HTML_файлов стандартам язы_ ка разметки, а потому нельзя использовать нестандартный атрибут rollover в те_ гах <img>, перейдите на XHTML и задействуйте для нового атрибута пространст_ во имен XML. В примере 22.3 демонстрируется версия функции initRollovers(), различающая пространства имен. Однако следует отметить, что эта версия функции не работает в Internet Explorer 6, потому что этот броузер не восприни_ мает DOM_методы, которые поддерживают пространств имен.

 

Пример 22.3. Инициализация эффекта смены изображений средствами XHTML с использованием пространств имен

 

/**

* Находит все теги <img> в документе, которые имеют атрибут "ro:src".

* Значение этого атрибута используется как URL_адрес сменного изображения, выводимого,

* когда указатель мыши наводится на изображение, и устанавливает соответствующие

* обработчики событий, с помощью которых достигается эффект смены изображений.

* Префикс ro: пространства имен должен отображаться на URI_адрес

* "http://www.davidflanagan.com/rollover"

*/

function initRollovers() {

 

var images = document.getElementsByTagName("img"); for(var i = 0; i < images.length; i++) {

var image = images[i];


 

552 Глава 22. Работа с графикой на стороне клиента

 

var rolloverURL = image.getAttributeNS(initRollovers.xmlns, "src"); if (rolloverURL) addRollover(image, rolloverURL);

}

}

 

// Это вымышленный URI_адрес для нашего пространства имен "ro:" initRollovers.xmlns = "http://www.davidflanagan.com/rollover";

 



<== предыдущая лекция | следующая лекция ==>
Невидимые изображения и кэширование | Анимация изображений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.174 сек.