Curso de Javascript 1.2
En esta página:
Objeto Image
Este objeto representa a una imagen. Se puede acceder a las diversas imágenes del
documento por medio del vector de referencias document.images[].
Este objeto está disponible desde el Netscape 3 y el Explorer 4. Sus propiedades más
importantes son:
src
-
Contiene el archivo de la imagen.
lowsrc
-
Los navegadores admiten incluir un nombre de imagen que se cargue antes que la imagen
final. Es útil para poner una imagen que ocupe poco mientras esperamos que se cargue la
imagen final, que puede ocupar una cantidad insultante de espacio. Esta propiedad permite
accede al archivo de esa primera imagen pequeña.
complete
-
Valor lógico que será true si la imagen ha
terminado ya de cargarse.
También dispone de diversas propiedades de sólo lectura que se corresponden con los
atributos de la etiqueta <IMG> como, por ejemplo,
width o border.
Tratamiento de imágenes
Lo que vamos a lograr con este truco es un pequeño cambio de imágenes. En muchas
páginas, al pasar el ratón por encima de una imagen puedes observar que el gráfico
cambia. Para hacer esto deberemos crear dos gráficos distintos: el que se verá
normalmente y el que únicamente podrá verse cuando el ratón pase por encima. Si
llamamos al primero, por ejemplo, apagado.gif y al
segundo encendido.gif el código necesario para que el
truco funcione es:
imagenes.html
<HTML>
<HEAD>
<TITLE>Ejemplo de imagenes</TITLE>
<SCRIPT LANGUAGE="JavaScript">
if (document.images) {
var activado=new Image();
activado.src="encendido.gif";
var desactivado= new Image();
desactivado.src="apagado.gif";
}
function activar(nombreImagen) {
if (document.images) {
document[nombreImagen].src=activado.src; }
}
function desactivar(nombreImagen) {
if (document.images) {
document[nombreImagen].src=desactivado.src; }
}
</SCRIPT>
</HEAD>
<BODY>
<A HREF="mipagina.html" onMouseOver="activar('prueba');"
onMouseOut="desactivar('prueba');">
<IMG NAME="prueba" SRC="apagado.gif" BORDER=0>
</A>
</BODY>
</HTML>
Lo primero que hay que indicar es que para que funcione el invento la imagen debe ser
un enlace. ¿Por qué? Porque los eventos que controlan si el ratón pasa o no por encima
no son admitidos por la etiqueta <IMG>. También
deberemos "bautizar" nuestra imagen usando el atributo NAME="como-se-llame" para permitir al código su
identificación posterior.
El ejemplo funciona de la siguiente manera: en principio la imagen que vemos es la
desactivada, que es la que indica la etiqueta <IMG>.
Al pasar el raton por encima de ella el evento onMouseOver
llamará a la función activar llevando como parámetro
el nombre de la imagen. Esta función sustituirá en el objeto document
el nombre del fichero donde se guarda la imagen por encendido.gif,
que es el gráfico activado. Cuando apartemos el ratón de la imagen, será el evento onMouseOut el que se active, llamando a desactivar. Esta función sustituirá el gráfico de nuevo,
esta vez por apagado.gif.
Leyendo esta explicación parece que una parte del código sobra. ¿Para qué sirve
declarar dos objetos Image para albergar los gráficos?
¿No bastaría con cambiar directamente el nombre de la imagen escribiendo document[nombreImagen].src = 'encendido.gif';? Pues no del
todo. Efectivamente funcionaría, pero cada vez que cambiásemos el nombre, el navegador
se traería la imagen del remoto lugar donde se encontrara. Es decir, cada vez que
pasásemos el ratón por encima de la imagen o nos alejaramos de ella tendríamos que
cargar (aunque ya lo hubiésemos hecho antes) el gráfico correspondiente. Es cierto que
con la caché del navegador este efecto quedaría algo mitigado, pero siempre es mejor
precargar las imágenes usando el objeto Image, ya que
así el navegador comenzará a leer el gráfico en cuanto ejecute el código en vez de
esperar a que el usuario pase por encima de la imagen con el ratón. El objeto Image tiene como atributos los distintos parámetros que
puede tener la etiqueta <IMG>.
Por último, hay que estudiar que significa eso de if
(document.images). Los navegadores en que no exista el objeto Image darán un mensaje de error si se lo encuentran por
ahí. La solución a este problema consiste en detectar la capacidad del navegador para
manipular gráficos preguntandole por la existencia del vector document.images.
Así podremos no crear las variables que guardan los gráficos ni ejecutar el código de
las funciones para activar y desactivar en el caso de que el navegador no soporte este
vector.
Y este es nuestro ejemplo funcionando:
|