Animar secciones de navegación con jQuery y css

animar navegacion con jQuery

Después del menú, otra de las tareas mas comunes es la creacion de un bloque o conjunto de bloques informativos que a su vez hacen el rol de secciones de navegación, ya saben un simple preview de las categorías mas importante del website, por lo general son una mezcla de texto informativo, imagen referente y link de acceso. Y claro un buen diseño visual logra atencion por parte del usuario, pero no hay nada mejor que el movimiento para hacer que sus ojos se enfoquen en ésa seccion, y ya que por motivos de accesibilidad el flash no es una opción, pues habra que recurrir a una buena maquetacion xhtml para el seo y base de la estructura, un poco de css para el aspecto visual y algo de javascript para la animación.

Pues bien comenzamos definiendo las secciones, para éste caso tomaré como ejemplo práctico un estudio fotográfico que provee 4 servicios principales de fotografia (publicitaria, artística, tarjetas y retratos)

<div class="navegacion">
<div class="seccion publicitaria">
<div class="img">
<h2><a href="/servicios/fotografia-publicitaria">Publicitaria</a></h2>
</div>
<div class="txt">Lorem ipsum dolor sit amet.</div>
</div>
<div class="seccion artistica">
<div class="img">
<h2><a href="/servicios/fotografia-artistica">Artística</a></h2>
</div>
<div class="txt">Lorem ipsum dolor sit amet.</div>
</div>
<div class="seccion tarjetas">
<div class="img">
<h2><a href="/servicios/tarjetas">Tarjetas</a></h2>
</div>
<div class="txt">Lorem ipsum dolor sit amet.</div>
</div>
<div class="seccion retrato">
<div class="img">
<h2><a href="/servicios/fotografia-retrato">Retratos</a></h2>
</div>
<div class="txt">Lorem ipsum dolor sit amet.</div>
</div>
</div>

Al contendor le asignamos la clase "navegacion", a las secciones algo tan simple como lo que cada una es "seccion", luego algunas clases adicionales para tratarlas a cada una por separado(algo tan simple como su nombre en nuestro caso), luego aqui viene el truco para el efecto rollover, solo hay que definir dos bloques en el mismo nivel jerarquico uno para el estado normal y otro a mostrar cuando pase el mouse por encima, al primer bloque que es el que contendrála imagen le colocamos una clase tan simple como "img" (demasiado obvio no), dentro de el div anidamos un encabezado de segundo nivel(muy bueno para el seo y posicionamiento del url alli contenido), y dentro del encabezado el link de ley para que el buscador encuentre la pagina en mencion, ya habiendo terminado con el primer bloque iniciamos con el segundo(que en nuestro caso solo contendra texto, ya saben me gusta mostrarles lo basico y necesario para que luego puedan editarlo con facilidad) y le colocamos la clase "txt"(que simple, por eso amo el xhtml y css, me hace la vida tan fácil). Ya luego hacemos lo mismo con las demas secciones.

Bueno ya habiendo terminado con la maquetació, es hora de agregarle el estilo.

Primero eliminamos el margin y el padding del <h2> y estandarizamos algunas medidas(de yapa les pongo el css del body para la pagina de ejemplo).

body{
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
background:#000;
}
h2{
font-size:160%;
line-height:130%;
margin:0;
padding:0;
}

Luego definimos las dimensiones del contenedor, centramos y aplicamos un borde.

.navegacion{
margin:0px auto;
border:solid 1px #CCCCCC;
width:800px;
height:230px;
}

Ahora establecemos el ancho de nuestras secciones y las hacemos flotar a la izquierda.

.navegacion .seccion{
position:relative;
float:left;
width:25%;
}

Ahora nos aseguramos que el bloque de texto y el de la imagen se muestren comporten como bloques y esten posicionados relativamente a su nodo padre.

.navegacion .img, .navegacion .txt{
position:relative;
display:block;
}

Luego establecemos el alto del bloque de la imagen y su posicion en el eje z.

.navegacion .img{
z-index:3;
height:230px;
}

Despues hacemos uso de las clases particulares de cada uno de los bloques para colocarles las imagenes correspondientes.

.navegacion .publicitaria .img{ background: #FFFFFF url(publicitaria.jpg) center no-repeat; }
.navegacion .artistica .img{ background: #4675C5 url(artistica.jpg) left no-repeat; }
.navegacion .tarjetas .img{ background: #AA4400 url(tarjetas.jpg) center no-repeat; }
.navegacion .retrato .img{ background: #FFFFFF url(retratos.jpg) left no-repeat; }

Ahora establecemos las propiedades del segundo bloque, principalmente nos aseguramos que el ordenamiento en el eje z sea mayor que el del bloque anterior, que todo desbordamiento sea imperceptible y el alto con padding incluido sea 230px, los mismos que habra que aplicar como margen superior negativo para que los bloques se superpongan.

.navegacion .txt{
overflow:hidden;
height:210px;
cursor:pointer;
color:#FFF;
font-size:12px;
font-weight:bold;
line-height:150%;
padding:10px;
margin-top:-230px;
z-index:5;
opacity:0;
filter:alpha(opacity=0);
background-image:url(transparent.gif);
/*IE 6y7 necesitan un fondo para funcionar correctamente*/
}

Ya luego agregamos algunas lineas demas para cambiar el aspecto de los links.

.navegacion .seccion .img h2 a{
padding: 0 0 0 5px;
font-family: "Trebuchet MS";
font-style:italic;
color:#494949;
text-decoration:none;
}

Y otra pisca adicional para nuestro caso en el que el texto se pierde con la imagen.

.navegacion .artistica .img h2 a{
color:#CCCCCC;
} 

Ya habiendo terminado con el css es hora de echarle mano al javascript para agregar el efecto rollover y algo de funcionalidad.

Primero cargamos los scrips, iniciamos con el jquery y luego el nuestro que llame simplemente efectos.js

<script src="jquery.js" language="JavaScript" type="text/javascript"></script>
<script src="efectos.js" language="JavaScript" type="text/javascript"></script>

Ahora ya en nuestro documento javascript, es hora de hacer uso de la magica funcion ready() del jquery para agregar los eventos apenas cargue la página.

$(document).ready(function(){
var base_path = '/';
var links_servicios = ['servicios/fotografia-publicitaria', 'servicios/fotografia-artistica', 'servicios/tarjetas', 'servicios/fotografia-retrato'];
$('.navegacion .txt').each(function(i){
var bg = $('.navegacion .img').eq(i);
$(this).mouseover(function(){
$(this).fadeTo("slow", 1); 
bg.fadeTo("slow", 0.3);
});
$(this).mouseout(function(){
$(this).fadeTo("slow", 0);
bg.fadeTo("slow", 1);
});
$(this).click(function(){ location.href = base_path + links_servicios[i];	});
});
});

Cabe recalcar que la version de jQuery usada para éste ejemplo es la 1.0.4, pudiendo haber algunas diferencias con la versión actual. Dejando eso aclarado pasamos a definir la raiz del sitio, ésto se usara posteriormente para redireccionar la pagina cuando el usuario haga click en la seccion ya que el bloque de texto capturará los eventos sucedidos sobre él con lo cual el link agregado anteriormente quedará inservible para el usuario final (aunque muy útil para los buscadores), luego creamos un array que contenga las urls relativas a la raiz del website (si algo he aprendido en éstos años es que es mucho mas facil trabajar con urls relativas a la raiz del sitio). Luego usando selectores css capturamos los nodos contenedores del texto, hacemos un recorrido por el array con un each() capturando su indice para usarlo posteriormente, luego definimos como "bg" el nodo contenedor de la imagen correspondiente del item actual, y se agregan los eventos mouseover y mouseout para hacer un fadein y fadeout de los bloques.

Ya para finalizar se agrega el evento click para redireccionar al usuario a la pagina referente a cada bloque.

Y ahora al fin sin más preambulo les dejo el demo.

Añadir nuevo comentario

buy Endep c o d want to buy Endep in usa buy discount Amitriptyline where can i buy Amitriptyline without a rx online Amitriptyline purchase buy Amitriptyline with no prescription buy Amitriptyline online without prescription fedex Amitriptyline overnight without a prescription what is Amitriptyline buy Endep australia buy next day Endep buy Endep online with a debit card buy generic Endep online order no online rx Endep buy Endep 75mg buy Endep no prescriptions order Endep pharmacy next day delivery on Endep saturday buy Endep from india buy cheap Anafranil on line buy online rx Endep without buy Aricept amex purchase online prescription Aricept without buy next day Aricept buy Aricept cash on delivery purchase cheap Aricept Aricept overdose buy Nizoral with mastercard where can i purchase Nizoral online Nizoral pharmacy purchase Nizoral without prescription from us pharmacy Nizoral uk no prescription Nizoral with fedex buy Nizoral with amex online purchase Nizoral order Nizoral online buy Amitriptyline in india purchase online prescription Famvir without Buy Famvir pill Famvir free consultation fedex overnight delivery buying Famvir without a prescription buy Famvir pay pal without prescription Famvir without dr purchase Famvir without a prescription overnight shipping how to buy Finpecia on line Abilify buy online purchase Abilify over the counter cod overnight Buy Famvir online pharmacy how to get a Famvir rx Abilify order online Non perscription cheap Finpecia buy discount Lisinopril on line buy Lisinopril no prescription low cost order Lisinopril pay pal online without rx buy Lisinopril online no perscription where to purchase cheap Lisinopril no rx buy Lisinopril now Maxalt purchase purchase Maxalt cod next day delivery where to buy Maxalt online purchase Maxalt online without rx best buy Maxalt Maxalt online maxalt overnight no script mastercard accepted cheap maxalt no script order arimidex overnight delivery purchase arimidex without a prescription online buy cheapest Arimidex and Arimidex buy no perscription Arimidex discount Arimidex achat Arimidex buy cheap online pharmacy Lisinopril How to get perscription of Lisinopril buy Lisinopril now Lisinopril order buy Amitriptyline no prescription Fluoxetine no prior script online Fluoxetine purchase cheap order rx Fluoxetine order Fluoxetine no visa without rx buy Fluoxetine toronto buy Fluoxetine drugs where can i buy herbal Fluoxetine prescription Fluoxetine buy Fluoxetine without doctor buy Fluoxetine on line Anafranil online purchase Anafranil from india Anafranil with repronex buy Anafranil amex online without prescription where to buy Anafranil online where can i purchase Anafranil without a prescription buy Anafranil pay pal without prescription Nizoral purchased online without prescription buy Aricept offshore no prescription fedex Aricept without prescription medications overnight Aricept without a rx uk Aricept generic how to order Amitriptyline online without a rx Accutane 40 mg delivered overnight Accutane 40 mg overnight delivery fed ex Accutane 40 mg overnight delivery fed ex where to purchase generic Accutane 40 mg online without a rx buy 40 mg Accutane free fedex delivery 40 mg Accutane uk order Amitriptyline Amitriptyline best buy generic Accutane 40 mg uk buy Accutane 40 mg in mo buy Accutane 40 mg uk buy generic Accutane 40 mg pills order 40 mg Accutane online next day delivery 40 mg Accutane ordering without a dr