Efecto Rollover sencillo en JQuery

Marzo 23rd, 2011 1 Comentario »

Como varios me habeis pedido que publique cosas sobre JQuery (ya se sois unos vagos y no os gusta leeros manuales :p) voy a ir poniendo programitas sencillos para que veais lo fácil que es “crear” cosas usando este potente Framework de JavaScript.

En esta entrada vamos a hacer un sencillo efecto de rollover en una imagen. La imagen se cargará de inicio. Cuando pasemos el ratón  por encima (onmuseout en JavaScript), dicha imagen cambiará a otra y cuando abandonemos el espacio que ocupa (onmouseout) se volverá a la imagen inicial.

Hacer esto en JavaScript es relativamente sencillo (como se ha visto en clase). Hay que hacer un par de funciones (una para cada evento del ratón) y jugar con el atributo src de la imagen.

Con JQuery es mucho mas rápido. No hace falta indicar ningún evento en el HTML y vamos a tener listo el efecto en una sola función.

Preparación

Lo primero es colocar una imagen en nuestra página con su respectivo ID:
<body>
<img id="foto" src="images/original.jpg" />
</body>

A continuación, en la cabecera enlazamos el fichero jquery.js y abrimos las etiquetas necesarias para que el efecto esté disponible  tan pronto como se cargue la página (como window.onload en JavaScript):

<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//Aqui va el código del efecto
});
</script>

Ni que decir tiene que, a la hora de enlazar el fichero jquery.js, se debe poner la ruta relativa de este (habiendolo descargado previamente desde aqui) o poner la URL donde esta alojado. Esto está mas que visto en clase :)

Programando el efecto

Lo que nos queda es programar el efecto. Para ello vamos a poner el código donde os he indicado en el paso anterior (dentro del $(document).ready):

$('#foto').hover(
function() {
$('#foto').attr("src","images/cambio.jpg");
},
function() {
$('#foto').attr("src","images/original.jpg");
}
);

Para los que no sepan aún como va el JQuery os explico a grandes rasgos como funciona:

  • Con $('#foto') se selecciona la etiqueta cuyo ID sea foto (como un getElementById en JavaScript).
  • $('#foto').hover indica que se va a crear un rollover y necesita dos funciones. La primera será la que se haga cuando se ‘entre’ en la imagen y la segunda, cuando se ‘salga’.
  • Con $('#foto').attr("src","ruta") tocamos el atributo SRC del elemento seleccionado.

Como veis, todas las ordenes de JQuery son mucho más intuitivas que las de JavaSCript (y mas cortas de escribir)

Os dejo el ejemplo completo para descargarlo: Ejemplo rollover

Videobox: Un Lightbox para video

Enero 19th, 2010 6 Comentarios »

En clase hemos visto multitud de clones del script LightBox. Son muy sencillos de usar y obtenemos un efecto muy interesante para mostrar las fotos de nuestras paginas.

Por si alguno no se acuerda, yo en clase suelo explicar el uso del LyteBox que, como veis, no es mas que un clone muy sencillo del anterior.

Pues bien, el mismo efecto que conseguimos en las fotos podemos conseguirlo en los videos de youtube que enlacemos en nuestras paginas usando para ello VideoBox.

Colocar VideoBox es exactamente igual que colocar cualquier clone de LightBox. Lo primero es descargar el archivo con todo lo necesario: AQUI.

Lo siguiente es enlazar las librerias .js y el CSS:

<script src="js/mootools.js" type="text/javascript"></script>
<script src="js/swfobject.js" type="text/javascript"></script>
<script src="js/videobox.js" type="text/javascript"></script>

<link rel=”stylesheet” href=”css/videobox.css” type=”text/css” media=”screen” />

Y para finalizar, al igual que pasaba con LightBox y similares, colocamos el atributo rel en los enlaces que usados para ver los videos de youtube que queremos poner en nuestras paginas:

<a href="http://www.youtube.com/watch?v=uhi5x7V3WXE" rel="vidbox" title="caption"> Foto relacionada con el video </a>

Tampien tenemos la opción de cambiar la resolución que queremos para la reproducción de nuestro video de forma muy sencilla: rel="vidbox width height".

Por ejemplo:

<a href="http://www.youtube.com/watch?v=VhtIydTmOVU" rel="vidbox 800 600" title="caption"> Foto relacionada con el video </a>

Galeria de Fotos Polaroid

Enero 18th, 2010 Sin Comentarios »

Aqui os traigo un efecto muy llamativo con el que vais a poder colocar vuestras imágenes imitando las fotos tipo polaroid: demo

Montar este “efecto” es muy sencillo. Como siempre, lo primero es descargarse las librerias necesarias de aqui.
Dentro del fichero que descargamos, aparte de estar todo lo necesario para que funcione el efecto, tenemos también un ejemplo que podemos abrir para editarlo y ver como funciona (index.html).

Lo siguiente es enlazar las librerias necesarias y el CSS:

<link rel="stylesheet" type="text/css" href="css/style.css"/>
<script type="text/javascript" src="js/jsapi.js"></script>
<script type="text/javascript" src="js/script.js"></script>

Lo ultimo que tenemos que hacer hacer es mantener la siguiente estructura HTML para insertar las fotos:
<div id="polaroidcontainer">
<div class="polaroid">
<img src="images/01_colosseum.png" alt="Colloseum" />
<p>Coloseum in Rome</p>
</div>
<div class="polaroid">
<img src="images/02_vatican.png" alt="Vatican" />
<p>Vatican</p>
</div>
<!-- Mas imagenes aqui -->
</div>

Aclaraciones

El primer DIV ‘polaroidcontainer‘ sirve para delimitar “la mesa” donde estarán colocadas nuestras fotos. El tamaño de esa “mesa” lo podemos tocar en el CSS buscando el selector correspondiente:

#polaroidcontainer { width:800px; height:400px; }

Para ir poniendo fotos nuevas tan solo debemos ir añadiendo:

<div class="polaroid">
<img src="Ruta de la nueva foto" alt="alt de la foto" />
<p>Titulo de la foto</p>
</div>

El DIV ‘polaroid‘ es el encargado de hacer el efecto deseado. Dentro del CSS veremos que usa como imagen de fondo para cada foto el archivo: polaroid-bg.jpg para imitar el estilo de foto polaroid.
Dentro de este DIV ira la foto deseada (con etiqueta IMG) y el titulo de cada foto (entre etiquetas P).

Si ademas combinais este efecto con el LyteBox o similares, os queda una galeria de fotos muy completa.

Pagina Oficial del Efecto

Textareas elasticos

Enero 15th, 2010 Sin Comentarios »

He encontrado un efecto muy curioso y muy facil de activar: Textareas elasticos
Con este efecto vamos a conseguir que nuestros textareas ocupen solo la altura necesaria para albergar el texto que escriba el usuario. Si el usuario escribe/borra texto, el textarea se adapta al contenido. Ver Demo.

Si mirais la documentación de la pagina que os he pasado antes, o mejor, si mirais el código fuente de la página de demostración, vereis que es muy sencillo “echar a andar” ese efecto:

Lo primero es descargar y enlazar librerias .js necesarias:

<script type="text/javascript" src="ext-core.js"></script>
<script type="text/javascript" src="elastic-textarea.js"></script>

Como veis, usa la API Ext JS JavaScript Podeis descargarla de AQUI. Para el ejemplo solo necesitamos el fichero ext-core.js, es decir, del fichero .zip que nos descargamos, solo necesitamos (para este efecto) el fichero ext-core.js de todos los que trae.

La siguiente libreria, elastic-textarea.js, la descargamos de AQUI.

Para acabar, definimos nuestro textarea con un id, pej:

<textarea id="comentarios">Texto del textarea</textarea>

Y colocamos la llamada a la funcion:

<script type="text/javascript">
elasticTextArea("comentarios");
</script>

Y ya esta :)

Todas las instrucciones (en ingles) y los enlaces que yo he puesto aqui vienen en la pagina oficial del efecto: Six Revision

Colocar Flash en nuestras páginas

Marzo 25th, 2009 Sin Comentarios »

Ya sabemos que para colocar un archivo Flash en nuestra página hay que usar las etiquetas <object> (para Internet Explorer) y <embed> (para el resto). Lo que obtenemos es un codigo feo, poco legible y que además, a veces, no va bien dependiendo del navegador que usemos.

¿Hay alguna alternativa para mejorar esto? Pues si. Una vez más JavaScript sale al rescate y, colocando un par de cosas en nuestras paginas,  se va a encargar de hacer el “trabajo sucio” por nosotros.

Yo voy a comentar como se usa la libreria SWFObject. Se que existen otras que actúan de forma similar pero yo no las he probado.

Para usar esta libreria nos basta con 4 pasos:

  • Descargar la libreria AQUI
  • Enlazar el archivo swfobject.js en nuestra pagina:
    <script type="text/javascript" src="swfobject.js"></script>
  • Crear un DIV con un Id donde vaya a ir el archivo flash. Pej:
    <DIV id="contenido"></DIV>
  • Colocar, en el <head> de la pagina, algo como esto:
    <script type="text/javascript">
    swfobject.embedSWF("test.swf", "contenido", "300", "120", "9.0.0");
    </script>

Donde los argumentos de la función swobject.embedSWF son:

  1. test.swf: la ruta relativa del archivo flash que vamos a colocar.
  2. contenido: el Id del DIV creado para colocar el archivo.
  3. 300 y 200: anchura y altura del archivo Flash.
  4. 9.0.0: version Flash usada

Si todo ha ido bien, tendremos nuestro archivo Flash insertado de forma sencilla en la pagina. Y lo mejor es que funciona en todos los navegadores.

Creo que es obvio que, si vamos a colocar varios archivos flash, hay que crear varios DIV y colocar varias llamadas a la funcion swfobject.EmbedSWF con sus argumentos bien colocados.

Y si no hay JavaScript…

Imagino que os habreis dado cuenta ya a estas alturas que, usar una librera JavaScript,  tiene el incoveniente de como se verá la pagina si no está activado el JavaScript en el navegador.

Para cubrirme las espaldas en este caso, lo que yo hago es colocar dentro de cada contenedor, una imagen relacionada con el archivo Flash en cuestión (por ejemplo, el primer fotograma de la animación).

Así, si la pagina no acepta JS, se verán las imágenes colocadas en lugar de los archivos flash y no nos quedará fea.

Alternativas a los hacks de CSS (I)

Marzo 17th, 2009 Sin Comentarios »

¿A cuantos os ha pasado que, una vez terminada la maquetación de la página, la visualizais con otro navegador y toda al estructura baila? (Eso os pasa por no hacerme caso y no hacer las pruebas en varios navegadores:P)

La realidad es que maquetar en CSS es un verdadero coñazo. Tenemos que estar atentos a que toda la pagina se vea bien en, al menos, los dos navegadores mas extendidos: Internet Explorer y FireFox.

Cuando no hay manera de arreglar “nuestro fallo” en el CSS para que se vea bien la pagina en ambos navegadores, la gente “mala” recurrimos a los hacks que existen. ¿A quien le importa que el CSS sea valido cuando tienes un cliente que solo quiere que su pagina “sea bonita, este la primera en google y se vea en Firefox y Explorer”? Es triste, pero a la hora de la verdad es asi.

De todas formas, las cosas siempre hay que intentar hacerlas bien desde el principio. Debemos preocuparnos, en la medida de lo posible, que nuestro código HTML/CSS sea válido.

Para ello he encontrado algunas alternativas a esos hacks que usan “las malas personas“.

La primera es una libreria en JavaScript que, si la usamos, nos promete convertir al Internet Explorer en un navegador totalmente compatible con los estandares CSS.

A JavaScript library to make MSIE behave like a standards-compliant browser

La pagina oficial es esta: IE7-JS

La he estado probando y parece que funciona bien. Por lo menos en lo que se refiere al ajuste de medidas de paddings, margins y demás.

Sin embargo, no termina de convencerme.

  • Para empezar, es una libreria JavaScript, por tanto si el navegador no tiene activado los scripts, nuestra pagina no se corrige.
  • Hay que insertar un hack para usarla (el famoso IF en el HTML) que, si bien con él podemos pasar el validador, se aleja del objetivo de no tener que usar hacks.
  • Dependiendo de la velocidad de conexion del servidor, se ve como la pagina “se arregla”. Es decir, de principio la pagina es cargada sin arreglar y, tras cargar el script, la pagina se reajusta y se coloca bien (y todo ello lo ve el usuario).

Aunque es una alternativa muy trabajada y muy bien programada, yo solo la usaria en caso de tener que entregar algun prototipo de la pagina de un dia para otro. Y siempre con vistas a solucionar ese “baile de estructura”.