Como los demás elementos HTML, las capas
se pueden crear y modificar mediante JavaScript. Para poder hacerlo existe un objeto llamado
layer que contiene todos los atributos de las capas y varios métodos para
modificarlos. Son los siguientes:
Atributos | Descripción |
---|---|
name | El nombre de la capa que se definió con el parámetro ID. |
parentLayer | El objeto layer de la capa que contiene esta. Si no existe ninguna será el objeto window. |
top, left, pageX y pageY; style.top y style.left | Sitúan la esquina superior izquierda de la capa dentro del documento. |
clip.left, clip.right, clip.top, clip.bottom, clip.height y clip.width; posWidth y posHeight | Permiten modificar el área que se podrá ver dentro de una capa. |
zIndex; style.zIndex | Define el orden en el eje Z de la capa con respecto a las que están contenidas en la misma capa padre. |
above y below | El objeto layer inmediatamente encima o debajo de este o null si este es el que está encima (o debajo) de todos los demás. |
siblingAbove y siblingBelow | El objeto layer que comparte el mismo padre inmediatamente encima o debajo de este o null si este es el que está encima (o debajo) de todos los demás. |
visibility; style.visibility | Define si la capa es visible o no. Puede tomar los valores visible, hide o inherit. |
background | URL del gráfico de fondo (si lo hubiera) de la capa. |
bgColor | El color de fondo de la capa o null si fuese transparente. |
src | URL del contenido de la capa, en caso de que este se defina en otro documento HTML. |
Métodos | Descripción |
---|---|
moveBy(x,y) | Mueve la capa x pixels en el eje horizontal e y en el vertical. |
moveTo(x,y) y moveToAbsolute(x,y) | Mueven la capa a la posición (x,y). En el caso de moveTo se cambian los atributos left y top y, con moveToAbsolute, se modifican pageX y pageY. |
resizeBy(anchura, altura) | Aumenta el tamaño de la capa según los pixels que definan sus parámetros (en caso de ser negativos disminuirá). |
resizeTo(anchura, altura) | Define el tamaño de la capa. |
moveAbove(capa) y moveBelow(capa) | Colocan la capa encima (o debajo) de la capa dada como parámetro. |
load(URL, anchura) | Leen el contenido de la capa del URL especificado, cambiando a la vez la anchura de la misma. |
Netscape | Explorer |
---|---|
document.layers["micapa"] | document.all["micapa"] |
accederíamos a la capa que hayamos denominado micapa, pudiendo modificar sus propiedades de esta forma:
Netscape | Explorer |
---|---|
document.layers["micapa"].left=100 | document.all["micapa"].style.left=100 |
En el caso de que micapa tuviese capas hijo, accederíamos a ellas por medio del objeto document incluído a tal efecto dentro de micapa tal que así:
Netscape | Explorer |
---|---|
document.layers["micapa"]. | document.all["micapa"]. |
Como resultaría muy lioso estar poniendo un if cada vez que quisieramos acceder a una capa, resulta más elegante utilzar la función eval combinada con funciones y variables que devuelvan la cadena de caracteres que corresponde a la función deseada en cada navegador. El código siguiente es el que yo utilizo en el fichero general.js, que leen todas las páginas de este curso que quieren utilizar capas:
var referenciaEstilo; var capaVisible; var navegador; if (navigator.appName == "Netscape") { referenciaEstilo = ""; capaVisible="show"; navegador = "Netscape"; } else { referenciaEstilo = "style."; capaVisible="visible"; navegador = "Explorer"; } function referenciaCapa(nombreCapa) { if (navegador=="Netscape") return "document.layers['"+nombreCapa+"']."; else return "document.all['"+nombreCapa+"']."; }
Sin embargo, si lo que queremos hacer es HTML dinámico interpretable tanto por Netscape como por Explorer, no podremos hacer uso de la etiqueta <LAYER>. La única manera de manejar eventos en este caso consiste en utilizar los controladores de eventos de los elementos que estén dentro de la capa, o encerrar ésta en un elemento con controladores, como podemos ver en el siguiente ejemplo:
<HTML> <HEAD> <STYLE TYPE="text/css"> #ocultar1 { position: absolute; visibility: visible; width:300px; background-color:yellow; z-index:10005;} #ocultar2 { position: absolute; visibility: visible; width:300px; background-color:red; z-index:10000;} #cambiar { position: absolute; visibility: visible; width:300px; left:400px;} </STYLE> <SCRIPT LANGUAGE="JavaScript"> function ocultarCapa(nombreCapa) { eval(referenciaCapa(nombreCapa)+referenciaEstilo+ 'visibility = "hidden"'); } function mostrarCapa(nombreCapa) { eval(referenciaCapa(nombreCapa)+referenciaEstilo+ 'visibility = "visible"'); } function cambiarColor() { if (eval(referenciaCapa("ocultar1")+referenciaEstilo+ 'visibility == "'+capaVisible+'"')) ocultarCapa("ocultar1"); else mostrarCapa("ocultar1"); } </SCRIPT> </HEAD> <BODY> <DIV ID="ocultar1"> <P>Mi color, tu color, nuestro color... </DIV> <DIV ID="ocultar2"> <P>Mi color, tu color, nuestro color... </DIV> <DIV ID="cambiar"> <FORM> <INPUT TYPE=BUTTON NAME="Boton" VALUE="Cambia el color" onClick="cambiarColor()"> </FORM> </DIV> </BODY> </HTML>
Mi color, tu color, nuestro color...
Mi color, tu color, nuestro color...
Esto se mueve...
El código para hacerlo es el siguiente:
<HTML> <HEAD> <STYLE TYPE="text/css"> #scroller { position: relative; visibility: visible; left:-100px; width:100px;} </STYLE> <SCRIPT LANGUAGE="JavaScript"> var posicion=100; function moverCapa() { if (posicion != (screen.width+100)) posicion+=2; else posicion=-100; eval(referenciaCapa("scroller")+referenciaEstilo+'left ='+posicion); setTimeout('moverCapa()',2); } </SCRIPT> </HEAD> <BODY> <DIV ID="scroller"> <P>Esto se mueve... </DIV> </BODY> </HTML>De todos modos veremos ejemplos más complejos en el siguiente capítulo.