Manuales
HTML básico
HTML 2ª. y CSS
Propiedades CSS
Javascript
Applets Java
CGIs

 
dHTML
Introducción
Cambiar formato
Mover capas
Mover con teclado
Visibilidad
Mover con el ratón
 
JavaScript
Barra de estado
Botones y menús
Validar formular.
Passwords
Abrir ventanas
Cargar frames
Volver atrás
Alertas
Ver navegador
Cargar imágenes
 
Creación de páginas web
© Paco Cascón Soriano
(diseño del índice tomado de la espléndida página jsworld.com)

Movimiento de capas
Paco Cascón (en base a un gran tutorial de Thomas Brattli)

Los dos principales navegadores (Netscape y Explorer) se comportan de forma diferente a la hora de manejar capas creadas con CSS. En este tutorial vamos a ver cómo mover capas en cada uno de ellos y luego un método para trabajar en ambos.


Mover capas en Netscape 4:

Primero creamos la capa con el contenido que queremos desplazar:

<div id="capaamover" style="position:absolute; left:150; top:150" >Texto o imagen a mover</div>

Supongamos que queremos mover la capa a una nueva posición que esté situada a 400 pixels de la izquierda y a 100 de la parte superior:

<a href="#" onclick="document.capaamover.moveTo(400,100)">Pulsa para mover la capa</a>

Si quieres puedes ver este ejemplo. Sólo se verá en Netscape.



Mover capas en Explorer 4:

Explorer 4 no soporta la función .moveTo, así que habrá que mover la capa manualmente.

<div id="capaamover" style="position:absolute; left:200; top:200" >Texto o imagen a mover</div>

Supongamos que queremos mover la capa a una nueva posición que esté situada a 400 pixels de la izquierda y a 100 de la parte superior:

<a href="#" onclick="capaamover.style.pixelLeft=400; capaamover.style.pixelTop=100">Pulsa para mover la capa</a>

Si quieres puedes ver este ejemplo. Sólo se verá en Explorer.


Mover capas en Netscape 4 y Explorer 4:

Para conseguir hacer un script que funcione en ambos definiremos una serie de variables antes, con valores diferentes según el navegador del que se trate:


if(document.getElementById){  // si se trata de Netscape 6
        Refcapa='document.getElementById("'
        Refestilo='").style'
        Reftop='.top'
        Refleft='.left'
}
else if(document.layers){  // si se trata de Netscape 4
        Refcapa='document.'
        Refestilo=''
        Reftop='.top'
        Refleft='.left'
}
else if(document.all){ // si se trata de Internet Explorer 4
        Refcapa=''
        Refestilo='.style'
        Reftop='.pixelTop'
        Refleft='.pixelLeft'
}

Ahora crearemos la función que permita mover capas en ambos navegadores:

function movercapa(capa,x,y){
        eval(Refcapa+capa+Refestilo+Refleft+'='+x)
        eval(Refcapa+capa+Refestilo+Reftop+'='+y)
}

Hemos dado 3 argumentos a la función:
capa - el nombre del identificador (id) de la capa que queremos mover.
x - valor en pixels de la posición izquierda donde se posicionara la capa.
y - valor en pixels de la posición superior donde se posicionará la capa.

Con estos argumentos podremos usar esta función para poder mover diferentes capas.

Una forma de llamar a la función podría ser:

<a href="#" onclick="movercapa('capaamover',300,300)">Pulsa para mover la capa</a>

La función "eval" permite ejecutar cadenas (strings), devolviendo el resultado:

eval(Refcapa+capa+Refestilo+Refleft+'='+xstop)

En el Explorer 4 se verá así: capaamover.style.pixelLeft=300

y en el Netscape 4: document.capaamover.left=300

De esta manera esta función trabajará en ambos navegadores. Aquí podemos ver un ejemplo.


Mover capas repetidamente cada x pixels:

Todo será como antes, bastará sustituir el "=" por un "+=" en la función "moverecapa". De esta manera en lugar de que la capa vaya a la posición indicada por los pixels, lo que haremos es sumarle esos pixels a la posición actual, o restarlos si el valor que pongamos es negativo. De esta manera, cada vez que pulsemos se incrementarán o retsrán estos valores. La función quedaría así:

function movercapa(capa,x,y){
        eval(Refcapa+capa+Refestilo+Refleft+'+='+x)
        eval(Refcapa+capa+Refestilo+Reftop+'+='+y)
}

Si además queremos poder elegir los pixels a sumar o restar horizontal o verticalmente, podemos hacer un formulario con dos cajas de texto para el valor de las "x" y el de las "y". Si al input de las x lo llamamos "Izquierda" y al de las y, "Superior", una forma de llamar a la función, podría ser:

<a href="#" onClick="movercapa('capaamover',document.forms[0].Izquierda.value,
document.forms[0].Superior.value)">Pulsa para mover la capa</a>

Aquí tienes un ejemplo


Mover capas controlando la velocidad:

Ahora haremos unos pequeños cambios sobre la función moverCapa del ejercicio anterior, para poder controlar la velocidad del desplazamiento:

function moverCapa(capa,xstop,ystop,pasos,velocidad){
	if(eval(Refcapa+capa+Refestilo+Refleft)<xstop){
		eval(Refcapa+capa+Refestilo+Refleft+'+='+pasos)
	}
	if(eval(Refcapa+capa+Refestilo+Reftop)<ystop){
		eval(Refcapa+capa+Refestilo+Reftop+'+='+pasos)
	}
	setTimeout("moverCapa('"+capa+"',"+xstop+",
	    "+ystop+","+pasos+","+velocidad+")",velocidad)
}

La explicación de estas líneas sería:

  • pasos - Cuántos pixels avanzará la capa en cada movimiento hasta el lugar indicado. Cuánto mayor sea habrá menos movimientos y el desplazamiento será más rápido.
  • velocidad - El tiempo de retardo, en milisegundos, entre cada movimiento que ejecuta la función.
  • if(eval(Refcapa+capa+Refestilo+Refleft)<xstop){ - Si el valor izquierdo de donde esta esa capa es inferior que el escrito en xstop la capa se moverá a la izquierda.
  • eval(Refcapa+capa+Refestilo+Refleft+'+='+pasos) - Esto moverá la capa a la izquierda, los pasos asignados (p. ej. si pasos = 10, la capa se moverá de 10 en 10 px hacia la izquierda). Las 2 líneas siguientes hacen lo mismo pero en sentido vertical.
  • setTimeout("moverCapa('"+capa+"',"+xstop+","+ystop+","+pasos+",
    "+velocidad+")",velocidad)
    - Si el valor de la posición izquierda o superior todavía no ha alcanzado los valores indicados en xstop o en ystop, la función seguirá ejecutándose cada vez que pasen los milisegundos indicados en velocidad.

Para llamar a la función podríamos usar esta línea:

<a href="#" onclick="moverCapa('capaamover',300,300,5,10)">Pulsa para mover la capa</a>

Si quieres ver este ejemplo

Una versión más sofisticada, que también puede desplazarse a la izquierda y arriba (el modelo anterior no puede), y en la que podemos cambiar y definir las 4 variables a través de un formulario, se puede ver en el siguiente ejemplo de Bratta en jsworld.com.

Otro ejemplo tipo marquesina, y uno más que se activa automáticamente al cargar la página.