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

Готовые изображения могут включаться в веб-страницы с помощью тега <img>. Подобно любому HTML-элементу, элементом <img> можно управлять: присваивание нового URL-адреса свойству sгс заставляет броузер загрузить (если необходимо) и отобразить новое изображение. (Кроме того, можно изменять ширину и высоту изображения, заставляя броузер увеличивать или уменьшать его, но этот прием здесь не рассматривается.)

Возможность динамической замены одного изображения другим в HTML-документе открывает доступ к некоторым специальным эффектам. На практике чаще всего прием смены изображений привязывается к наведению указателя мыши на изображение. Когда изображение размещается внутри гиперссылки, смена изображения становится приглашением пользователю щелкнуть на изображении. (Аналогичный эффект можно получить с помощью псевдокласса CSS :hover, позволяющего изменять фоновое изображение элемента.) Следующий фрагмент разметки HTML выводит изображение, которое изменяется при наведении на него указателя мыши:

<img src="https://storage.yandexcloud.net/wr4img/497440_help.gif"

  onmouseover="this.src='images/help_rollover.gif'"

  onmouseout="this.src='images/help.gif'">

Обработчики событий в элементе <img> изменяют значение свойства src, когда указатель мыши наводится на изображение или покидает его границы. Эффект смены изображений отчетливо связывается с возможностью щелкнуть на изображении, поэтому такие элементы <img> следует заключать в элементы <а> или передавать обработчику события onclick.

Чтобы радовать глаз, эффект смены изображений (и родственные ему эффекты) должен иметь минимальное время отклика. Это означает, что необходим некоторый способ, гарантирующий предварительную загрузку всех необходимых изображений в кэш броузера. Для этой цели в клиентском JavaScript имеется специальный прикладной интерфейс: чтобы принудительно поместить изображение в кэш, нужно сначала создать объект Image с помощью конструктора Image(). Затем, записав в свойство src требуемый URL-адрес, загрузить изображение. Это изображение не будет добавлено в документ, поэтому, хотя изображение будет невидимо, броузер загрузит его и поместит в свой кэш. Позднее, когда тот же URL-адрес будет использоваться для изменения изображения, находящегося на экране, изображение быстро загрузится из кэша броузера.

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

<script>(new Image()).src = "images/help_rollover.gif";</script>

<img src="https://storage.yandexcloud.net/wr4img/497440_help.gif"

  onmouseover="this.src='images/help_rollover.gif

  onmouseout="this.src='images/help.gif "*>