Mostrar capas y ocultar capas con IE 4,5 NS 4

Valoración del artículo:
El propósito de este artículo, es hacer que se muestre u oculte una capa cuando se pasa con el ratón por encima de otra. Gracias a esta técnica, las páginas tendrán un aspecto mucho más dinámico.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
El propósito de este artículo, es hacer que se puedan mostrar capas y ocultar capas cuando se pasa con el ratón por encima de otra. Gracias a esta técnica, las páginas tendrán un aspecto mucho más dinámico.

Nota: desde que se publicó este artículo han salido muchas versiones de navegadores nuevos. Para trabajar con capas y hacer código compatible con todos los navegadores tenemos un manual en DesarrolloWeb.com que es de muy interensante lectura: Taller de Cross-Browser DHTML

1.Conocer el navegador que esta utilizando el usuario

Como Netscape e Internet Explorer llaman de forma distinta a las capas, lo primero que haremos, será detectar qué navegador se está utilizando. Para ello, lo que vamos a hacer es crear dos variables globales dentro de nuestro Script:

  • ns4: que estará a true si el navegador utilizado es Netscape
  • ie4: que estará a tru si el naveagor utilizado es Internet Explorer
var ns4,ie4

La función que utilizamos para inicializar el valor de las variables es la siguiente:

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false


2.Crear una variable que contenga a cada una de las capas

Una vez están creadas e inicializadas las variables del navegador, tenemos que crear otra variable, que contenga a la capa que queremos mostrar u ocultar. Esta variable se inicializará de forma distinta dependiendo del navegador que esté utilizando el usuario.

La siguiente funcion inicializa el valor de la variable "capa" con el nombre que tiene la capa que queremos mostrar u ocultar, en este caso se llamará "menu".

var capa

function init() {
 if (ns4) {
      capa = document.menu
  }
 if (ie4) {
 capa = menu.style
 }
}

3.Crear una función que muestre una capa

A continuación, definimos una función que dependiendo de si se esta utilizando el navegador Netscape o el Internet Explorer, cambiará el atributo de la capa que se le pasa por parámetro a visible. Para Netscape, llámará al Método Show, que será el encargado de cambiar el atributo. En Internet Explorer cambiaremos el atributo directamente.

function muestra(obj) {
 if (ns4) obj.visibility = "show"
 else if (ie4) obj.visibility = "visible"
}

4.Crear una función que oculte una capa

Al igual que con la función anterior, dependiendo si el navegador es Netscape o IE, cambiaremos de una forma u otra el atributo de la capa a oculto

function oculta(obj) {
 if (ns4) obj.visibility = "hide"
 else if (ie4) obj.visibility = "hidden"
}

5.Crear las dos capas

Una vez tenemos definido las acciones de mostrar u  ocultar capa, hay que crear el cuerpo del documento, en primer lugar, pediremos al navegador que ejecute la función Init, de forma que la variable capa esté lista para usar:

<body Onload="Init()">

Además tenemos que crear dos capas, la primera de ellas va a ser la que se va a ocultar y mostar. El nombre de la capa deberá ser Menu, que es la que hemos decidido utilizar en el punto 2.

<div id="menu" style="position: .....   ">

Además, hay que crear la segunda capa, que mostará la capa menu cuando el ratón esté encima de ella, y la ocultará cuando no. Cada una de estas acciones las realizará las funciones Muestra y Oculta, definidas en el punto 4.

Colocaremos además dentro de esta capa un enlace, con los manejadores de eventos necesarios para realizar acciones cuando se pose o no el ratón sobre el. Cuando se produzca el evento OnMouseOver (que el ratón entre en el enlace dentro de la capa), pediremos al navegador que ejecute la función Muestra, y cuando se produzca el evento OnMouseOut (que el ratón salga del enlace de la capa), pediremos al navegador que ejecute la función Oculta. Por lo que la definición de la capa quedará de la siguiente forma:

<div id="nombreCapa" Style="position:...."><a href="pagina.html" OnMouseOver="Muestra(capa)" OnMouseOut= "Oculta(capa)">Textode lacapa</a></div>

Y con esto ya está todo...

6.Código completo:

<html>
<head>
 <title>Untitled</title>

<script language="javascript">
var capa

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function init() {
   if (ns4) {
     capa = document.menu
  }
 if (ie4) {
   capa = menu.style
 }
}

function muestra(obj) {
 if (ns4) obj.visibility = "show"
 else if (ie4) obj.visibility = "visible"
}

function oculta(obj) {
 if (ns4) obj.visibility = "hide"
 else if (ie4) obj.visibility = "hidden"
}

</script>
</head>
<body onLoad="init()">
<div id="menu" style= "position:Absolute;left:50; top:60; background-color:#ff1133; visibility:hidden">hola</div>
<div id="CapaNormal" style= "position:absolute;left:50; top:150;background-color:pink;"><a href="#" OnMouseOver="muestra(capa)" OnMouseOut= "oculta(capa)">Ponte encima</a>...</div>
</body>
</html>

Con los conocimientos aquí aprendidos puedes intentar crear una barra de navegación dinámica que tenga varias opciones que, al pasar el ratón por encima, se vean sus distintas descripciones. Puedes encontrar en este sitio un artículo que te informa sobre cómo hacerlo.

Nota: Este artículo, aunque puede servir de ayuda e introducción al trabajo con capas, se encuentra un poco desfasado. Existen herramientas que pueden hacernos la vida más fácil.

Si deseamos hacer código que funcione correctamente para el trabajo con capas, podemos apoyarnos en unas librerías que nos permitan su manejo compatible con todos los navegadores.

En el artículo Cross-Browser. DHTML compatible con todos los navegadores tenemos más detalles.

Comentarios
Fueron enviados 6 comentarios al artículo
6 comentarios revisados:
Por: mamen
24/6/03
¿Alguien puede decirme entonces como solucionar el problema de que no se puedan mostrar capas en un frame llamandolas (con una funcion de javascript) desde otro?

RESPUESTA

En realidad sí que puedes llamar a elementos de frames distintos al que estás, ya sean capas, elementos del formulario o funciones javascript.

Tenemos un manual que trata este tema en detalle: Control de frames con Javascript

Por: Omar
23/2/04
Como es que entonces se puede hacer que una capa que se muestra desde un frame superior (tipo menu) se superponga al frame inferior
Por: javier
05/3/04
Pues no funciona ... ¿Lo habeis probado?

RESPUESTA

Puede que sea por incompatibilidades entre distintos navegadores que unas veces funcione y otras no. De todos modos este ejemplo se encuentra un poco desfasado. Si deseamos hacer código que funcione correctamente para el trabajo con capas, podemos apoyarnos en unas librerías que nos permitan su manejo compatible con todos los navegadores.

En el artículo Cross-Browser. DHTML compatible con todos los navegadores tenemos más detalles.

Por: palomeke
07/3/06
Hola!. Es el mismo scrip, pero los "cajones" de informacion vienen en color y de posicion. Lo hice porque a mi, con vuestro ejemplo, se me posiciona la informacion una debajo de la otra y no queda bien.

Y con respecto a vuestra entrega y labor en la materia, sencillamente...

MUCHAS GRACIAS DE CORAZON POR ESTAR Y ENSEÑARNOS!!!!

Desde badajoz un fuerte abrazo...

Ahi os va

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>

<html>
<head>
<title>Navegador con capas</title>

<script language="javascript">
var capa

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function init() {
if (ns4) {
capa1 = document.descripcion1
capa2 = document.descripcion2
capa3 = document.descripcion3
}
if (ie4) {
capa1 = descripcion1.style
capa2 = descripcion2.style
capa3 = descripcion3.style
}
}

function muestra(obj) {
if (ns4) obj.visibility = "show"
else if (ie4) obj.visibility = "visible"
}

function oculta(obj) {
if (ns4) obj.visibility = "hide"
else if (ie4) obj.visibility = "hidden"
}

</script>
</head>
<body onLoad="init()" link="#333399" vlink="#333399">

<!-- CAPA CON LOS DISTINTOS ENLACES -->
<div align="" id="enlaces" style="font-size: 10pt; font-family: arial,verdana,helvetica; font-weight: bold; color: #333399; position: absolute; height: 58; width: 100; background-color: #ffffcc; text-align: right;top: 10px;left: 10px">
<a href="#" OnMouseOver="muestra(capa1)" OnMouseOut= "oculta(capa1)">Mis Amigos</a>
<br>
<a href="#" OnMouseOver="muestra(capa2)" OnMouseOut= "oculta(capa2)">Mi pueblo</a>
<br>
<a href="#" OnMouseOver="muestra(capa3)" OnMouseOut= "oculta(capa3)">Enlaces</a></div>

<!-- CAPAS CON LAS EXPLICACIONES -->
<div id="descripcion1" style= "position:Absolute; left:136px; top:123px; background-color:#000000; width:250px; height:58px; font-size: 8pt; font-family: arial,verdana,helvetica; color: #99FF99; padding:5px; visibility: hidden;">Los amigos reunidos jam&aacute;s ser&aacute;n vencidos<br>
Con todo el texto que desees</div>
<div id="descripcion2" style= "position:Absolute;left:416px; top:120px; background-color:#99FF99; visibility:hidden;width:250px;height:58px;font-size: 8pt; font-family: arial,verdana,helvetica; color: #333399;padding:5px">El pueblo m&aacute;s tur&iacute;stico de todo el polo norte, a 20.000 kil&oacute;metros de la gasolinera m&aacute;s cercana</div>
<div id="descripcion3" style= "position:Absolute;left:429px; top:51px; background-color:#993366; visibility:hidden;width:250px;height:58px;font-size: 8pt; font-family: arial,verdana,helvetica; color: #FFFF99;padding:5px">Todos los enlaces que necesitas para entrar en Internet con las m&aacute;ximas garant&iacute;as de &eacute;xito.</div>
</body>
</html>



</body>
</html>


Por: Boludo
11/7/06
ASqu{i va una versión modificada de la anterior que si funciona:

<html>
<head>
<script language="javascript">
function muestra() {
menu.style.visibility = "visible"
}
function oculta() {
menu.style.visibility = "hidden"
}

</script>
</head>
<body>

<input type=button value=ocultar onclick="oculta()">
<input type=button value=mostrar onclick="muestra()">


<div id="menu" style= "position:Absolute;left:50; top:60; background-color:#ff1133; visibility:visible">
Hola
</div>

</body>
</html>
Recomendamos Mootools o jQuery
07/4/09
Hola!

Para hacer este tipo de efectos ahora es mucho más recomendable utilizar un framework Javascript de tipo Mootools o jQuery. En DesarrolloWeb.com hay manuales de estos dos sistemas:
http://www.desarrolloweb.com/manuales/manual-mootools.html
http://www.desarrolloweb.com/manuales/manual-jquery.html

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo