|
|
Moderador del foro: ZorG |
Foro uCoz Ayuda a los webmasters Configuración del diseño Mootools (les presento una herramienta interesante y útil) |
Mootools |
MOOTOOLS Qué es Mootools, un framework Javascript para construir aplicaciones web dinámicas y compatibles con cualquier navegador. Introducción a Mootools. Seguro estoy de que ya ha llegado el momento de escribir algún artículo sobre este interesante sistema. No puedo decir que sea un experto, ni mucho menos, pero creo que podré ayudar a las personas que quieren dar sus primeros pasos usando Mootools en sus páginas web. Lo primero sería decir que Mootools es un framework Javascript, que sirve para crear fácilmente código Javascript independiente del navegador, de una forma rápida y directa. Dicho de otra manera, que tal vez sea más fácil de entender, Mootools es un conjunto de librerías, también llamado API, que proveen clases de programación orientada a objetos en Javascript, para realizar una amplia gama de funcionalidades en páginas web, como trabajo con capas, efectos diversos, Ajax y mucho más. Con Mootools podemos programar todo tipo de scripts en el cliente rápidamente y sin preocuparnos de las distintas particularidades de cada navegador. Mootools está especialmente indicado para programar scripts complejos, que nos costaría mucho más trabajo de realizar si partiésemos de cero. Existen diversos framework en Javascript, la mayoría ni he probado todavía. Mootools es una opción interesante, bastante difundida y que tiene una serie de ventajas como: • Ligero: el framework no pesa demasiado en Kb y no el procesamiento carga poco al navegador. Pero también hay cosas que no me han gustado tanto, como la documentación, que resulta un poco escasa. Realmente tiene una buena documentación, pero la encuentro un poco escueta y falta de explicaciones o ejemplos. También he de decir que me resultó bastante difícil dar los primeros pasos utilizando el framework, es decir, la curva de aprendizaje de Mootools en el inicio resulta bastante complicada y los ejemplos que encontraba en un principio demasiado complejos para poder entender qué y cómo estaban trabajando. No obstante, después de realizar con éxito unas cuantas pruebas, ya pude empezar a crear mis propios scripts personales. Uno de mis objetivos es preparar una buena serie de ejemplos sencillos para que los nuevos desarrolladores de Mootools puedan comenzar con mayor facilidad que yo en el trabajo con el framework. Para acabar esta introducción hay que decir que Mootools es gratuito y de código abierto, con licencia MIT, que permite usarlo y modificarlo en cualquier caso de uso. En los artículos siguientes voy a ilustrar el uso de Mootools, con el la versión framework 1.11, que es la que estaba en producción en el momento de escribir este texto. Dejo la URL de Mootools para consultas y descargas del Framework. http://mootools.net
DESCARGA DE MOOTOOLS Podemos descargar Mootools desde la propia página del framework. Debemos elegir los módulos con los que queremos trabajar y la compresión del archivo. La descarga de Mootools es sencilla, pero incorpora varias opciones que podemos resumir en este artículo. Tenemos dos cosas que elegir cuando hacemos el download de las librerías: Módulos que queremos descargar: Los módulos tienen algunas dependencias unos con otros. Pero la herramienta para descarga es "inteligente" y si seleccionamos un módulo que necesita de otro, lo marca automáticamente para la descarga en el paquete que necesitamos. El módulo Core es necesario para cualquier paquete de librerías Mootools, por lo que siempre se debe descargar y aparece marcado desde el principio. Luego, si por ejemplo marcamos las librerías Element.Event, se marcarán adicionalmente otra serie de librerías que son necesarias para que esta funcione, como Class, Array, Element, etc. Tipo de compresión de la descarga: Lo que está claro que cuanta mayor compresión, menos ocupará el archivo y menor será por tanto el tiempo de descarga en nuestra web. Pero cuando estamos desarrollando igual nos conviene una versión con todo el código y la documentación en el propio archivo, para que podamos guiarnos con ella para depurar cualquier fallo. En esta serie de artículos he utilizado la versión de Mootools 1.11, que era la que estaba para descarga en el momento de hacer este texto. Voy a colocar aquí los archivos para descarga, para que cualquiera que quiera seguir estas explicaciones pueda utilizar las mismas versiones de la librería que usé yo en los ejemplos. mootools-release-1.11-completo-comprimido.js.txt mootools-release-1.11-completo-documentado-comentarios.js.txt mootools-1.11-parcial-comprimido.js.txt No obstante, hay que remarcar que para nuestros proyectos será mejor descargar Mootools en las versiones más actuales, que vendrá más completo y con mayor depuración del código. Además, desde la propia página de descargas podremos seleccionar los módulos que realmente vamos a necesitar en nuestras aplicaciones.
Las vírgenes tienen muchas navidades pero ninguna Nochebuena.
|
PRIMER EJEMPLO CON MOOTOOLS Un primer ejemplo de página web que utiliza Mootools para hacer un efecto sencillo que nos permita conocer el framework sin ningún conocimiento previo del sistema. Como había dicho en la introducción de este manual, Mootools puede resultar difícil para las personas que nunca han trabajado con él o con otro framework Javascript. Por eso tiene sentido hacer un ejemplo inicial muy simple para iniciarse. Este ejemplo realmente no sirve para nada, simplemente para que veamos la facilidad con la que se puede utilizar Mootools para realizar código Javascript compatible con todos los navegadores más habituales. No obstante, hay que decir que para poder utilizar Mootools debemos tener antes un conocimiento medio o avanzado de Javascript, porque realmente lo que estamos haciendo en estos ejemplos es programar en Javascript funcionalidades para páginas web. Para empezar, hay que incluir el código Javascript de las librerías de Mootools, esto se hace incluyendo el archivo externo de código Javascript con las librerías del framework, que hemos descargado de la página de Mootools.
Quote <script src="mootools -1.11.js" type="text/javascript"></script> La función $() Las librerías de Element.js, dentro del paquete llamado NATIVE, contienen varios métodos que podemos invocar sobre los objetos element, para realizar cosas con ellos, analizarlos o alterar su estado. Nosotros vamos a utilizar dos métodos de Element: Método setOpacity() Método setStyle() Con estos datos, ya conocemos todo lo que debemos saber de Mootools para entender el siguiente ejemplo. El código del ejemplo es el siguiente:
Quote <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>ejemplo básico con mootools</title> <script src="mootools-comprimido-1.11.js" type="text/javascript"></script> <script> window.addEvent('domready', function(){ opaco_actual = 0; capa_transicion = null; cargado = true; }); </script> </head> <body> <div id="texto_presentacion">Hola, esto es un texto para hacer una prueba con Mootools. Simplemente estoy alterando propiedades de el DIV donde está este texto.</div> <form> </body> Veremos que hemos incluido las librerías Mootools en el head de la página, con un archivo externo Javascript, cargado con la etiqueta <script>. También debemos fijarnos que tenemos una capa, creada con un <div> que tiene el atributo id para especificar su nombre: id="texto_presentacion". Luego, tenemos un formulario con una serie de botones, cada uno con un código Javascript que se ejecuta cuando el usuario hace clic sobre el botón. La primera serie de botones alteran la opacidad del elemento.
Quote $('texto_presentacion').setOpacity(0); Con $('texto_presentacion') recibimos un objeto que es el elemento que tenía el id="texto_presentacion". Luego sobre ese objeto invocamos el método setOpacity() pasando por parámetro el valor de opacidad. Con eso se cambia la transparencia de la capa. Luego tenemos otra serie de botones que alteran algunos atributos de estilo del elemento.
Quote $('texto_presentacion').setStyle('width', '200px'); Esto altera el atributo CSS width y lo cambia por el valor 200px, con lo que la capa texto_presentacion tendrá un ancho de 200 pixel.
Quote $('texto_presentacion').setStyle('border', '1px solid #ff0000'); Con esto aleramos el atributo CSS border, y le pasamos un nuevo valor que indica que tenga un borde sólido de 1 pixel y con color rojo.
Quote $('texto_presentacion').setStyle('width', '50%'); Con esto último cambiamos de nuevo el atributo width para poner una anchura de 50%, es decir, la mitad del espacio disponible donde está el elemento. Espero que el ejemplo haya sido suficientemente sencillo y claro para entender un poco la facilidad con la que podemos realizar acciones, más o menos complejas, en la página web. Todo sin preocuparnos de las particularidades de cada navegador. Podemos probarlo en distintos browsers para ver que funciona perfectamente, es decir, hemos conseguido un código cross-browser, compatible con todos los navegadores, con un trabajo casi nulo. Dejo el enlace para ver el ejemplo en marcha.
SEGUNDO EJEMPLO DE MOOTOOLS Vamos a otro ejemplo sencillo con Mootools para crear un scroll en una capa de la página. Para continuar el manual de Mootools, vamos a ver un segundo ejemplo de gran sencillez para hacer un scroll en una capa por Javascript. Este sistema de scroll o desplazamiento sería muy complejo de hacer sin la ayuda del framework como Mootools. Nosotros lo vamos a hacer con una simple ejecución de una sentencia Javascript. Ahora voy a poner el enlace al ejemplo en marcha para que podamos verlo en funcionamiento antes de pasar a visualizar el código. El presente ejemplo utiliza el módulo llamado Element.Dimensions.js, que tiene dos métodos que nos van a servir para hacer el desplazamiento: Método scrollTo() Método getSize()
Quote mielemento.getSize().scroll.x Nos devolvería los píxel que se haya desplazado el elemento mielemento en la horizontal.
Quote mielemento.getSize().scroll.y Nos devolvería el desplazamiento vertical que se haya realizado sobre el elemento mielemento. El código de este sencillo ejemplo es el siguiente:
Quote <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>Ejemplo 2 con Mootools</title> <script src="mootools-comprimido-1.11.js" type="text/javascript"></script> </head> <body> <div id="texto_scroll" style="overflow: auto; height: 70px; width: 400px;"> </body> Como vemos, primero hemos incluido dentro del head de la página el script con el framework de Mootools, con la etiqueta <script>. Luego hemos creado una capa con un texto y una serie de estilos CSS para que tenga un tamaño definido, que no permita ver el contenido completo del texto, y unas barras de desplazamiento para hacer el scroll. A continuación hay un script que crea una variable global a la página que contiene la capa que queremos desplazar.
Quote <script> capa_desplazar = $('texto_scroll'); </script> Luego hay un par de enlaces que son los que, pulsándolos, desplazará automáticamente el texto arriba o abajo.
Quote <a href="javascript:capa_desplazar.scrollTo(0, capa_desplazar.getSize().scroll.y + 20);">Abajo</a> Con "javascript:" metido en un href de un enlace, estamos indicando que se tiene que ejecutar esa sentencia javascript al pulsar el link. Y la sentencia es:
Quote capa_desplazar.scrollTo(0, capa_desplazar.getSize().scroll.y + 20); Eso indica que en la variable de la capa que habíamos creado antes, capa_desplazar, se tiene que ejecutar el método scrollTo(). Este método recibe como primer parámetro 0, porque no queremos desplazarlo horizontalmente. Luego como desplazamiento vertical ponemos el desplazamiento vertical del elemento + 20 píxel. El desplazamiento vertical actual del elemento lo sacamos con capa_desplazar.getSize().scroll.y, tal como habíamos explicado antes en este artículo. El enlace de para desplazar el scroll hacia arriba sería muy similar al que acabamos de ver.
Quote <a href="javascript:capa_desplazar.scrollTo(0, capa_desplazar.getSize().scroll.y - 20);">Arriba</a> La única diferencia es que ahora hacemos un scrollTo() a cero en la horizontal y a el scroll actual - 20 píxel. Espero que se haya entendido el ejemplo. Podemos ir a la documentación de Mootools, del módulo Element.Dimensions.js para obtener la descripción completa de los métodos que hemos utilizado. Hasta aquí en este manual hemos visto un par de ejemplos muy simples sobre Mootools, este segundo un poco más práctico. Pero el objetivo no es sino expresar por medio de un código la sencillez con la que se programa con Mootools para conseguir efectos que de otra manera nos hubiera costado mucho trabajo programar. Y todo compatible con los navegadores más habituales.
PESTAÑAS DINÁMICAS CON CSS Y MOOTOOLS Sobre cómo crear una interfaz de pestañas dinámicas, maquetadas con CSS y con dinamismo creado con Javascript y Mootools. Vamos a ver cómo crear un sistema de pestañas o tabs que responda a las acciones del usuario. De modo que, haciendo clic en las distintas pestañas, se muestren dinámicamente los contenidos asociados a los distintos items, en el mismo espacio y sin recargar los contenidos de la página. Es decir, tendremos varias pestañas y un área donde se mostrarán los contenidos relacionados con cada una. Inicialmente se mostrará un contenido de una pestaña y luego, cuando se seleccionen otras, se cambiará el color para mostrar la pestaña activa y se mostrará el contenido asociado a la nueva tab activa. Quizás lo más fácil es ver el ejemplo en marcha para hacerse una idea exacta de nuestras intenciones. Este artículo tiene una cierta intención: Queremos mostrar cómo animar un sistema de pestañas y aplicar la interacción con el usuario, para que el sistema de tabs sea perfectamente funcional y sirva para mantener varios contenidos en un mismo espacio. Todo se debe hacer dinámicamente y respondiendo a las acciones del usuario. En este caso, el artículo sirve de colofón a una serie de artículos en los que venimos creando un sistema de tabs maquetados con CSS. • Diseño de pestañas con CSS Cambios sobre la maquetación CSS de las pestañas Para aplicar el dinamismo con Javascript sobre esas pestañas hemos hecho un par de cambios en el código HTML y CSS de las pestañas. Por una parte, hemos creado unas nuevas capas donde se muestran los contenidos que tienen que visualizarse cuando se active cada una de las pestañas. Inicialmente sólo uno de los contenidos asociados a los tab está visible, el que corresponde con la pestaña activa. Los demás los tenemos que ocultar de momento. Por otra parte se han incorporado unos identificadores (atributos id) en los elementos que queremos dinamizar. Esos identificadores han sido colocados en las etiquetas LI de las pestañas y en las etiquetas DIV de los contenidos asociados a ellas. Serán importantes para acceder a los elementos desde Javascript. El código HTML quedará de la siguiente manera:
Quote <div id="pestanas"> <ul> <li id="p1"><a href="javascript: void(0);" onclick="cambiaPestana(0)">DesarrolloWeb.com</a></li> <li id="p2" class="activa"><a href="javascript: void(0);" onclick="cambiaPestana(1)">CriarWeb.com</a></li> <li id="p3"><a href="javascript: void(0);" onclick="cambiaPestana(2)">Comunidad</a></li> <li id="otrapestana"><a href="javascript: void(0);" onclick="cambiaPestana(3)">Otro enlace más largo</a></li> </ul> </div> <div id="contenedorpestanas"> <div id="cont1" class="nover">Contenido de la pestaña con título DesarrolloWeb.com</div> <div id="cont2">Contenido de la segunda pestaña, que tenía el título CriarWeb.com!</div> <div id="cont3" class="nover">Otro contenido de la pestaña<br>En este caso el tercer elemento.</div> <div id="cont4" class="nover">El contenido de la última pestaña<p>Le creo un párrafo para que se haga un poco mayor!</p></div> </div> Podemos haber observado además que los enlaces tienen unos códigos para definir el href y el evento onclick. En seguida los explicaremos. También podremos observar que dentro del DIV con id="contenedorpestanas" se han colocado los distintos elementos que se van a asociar con cada una de las pestañas. A estos elementos les hemos colocado una clase CSS class="nover" para que inicialmente no estén a la vista. Sólo hemos dejado a la vista (sin el mencionado class="nover") el elemento asociado a la segunda pestaña, que es la que está activa. La clase "nover" tendrá este código CSS:
Quote .nover{ display: none; } Descargar y enlazar el framework Mootools Este ejemplo lo hemos desarrollado con Mootools, por lo que, si no lo tenemos, debemos ir a la página de inicio del Framework para descargarlo: http://mootools.net Haremos el download del "core" de Mootools, aunque en en vídeo que podrás ver más tarde explicaremos la forma de descargar una versión reducida del "core", dado que nuestro script es tan sencillo que no necesita incorporar todas las características del framework. Para incluir Mootools en la página tenemos que crear una etiqueta script con la que enlazar con el código del framework:
Quote <script src="mootools-1.2.2-core-reducido.js" type="text/javascript"></script> Script Javascript que hace uso de Mootools para animar las pestañas El dinamismo que tenemos que producir sólo tiene que hacer 1 cosa: estar pendiente de los clic del usuario sobre las pestañas, para mostrar en todo momento como activa la pestaña sobre la que se ha hecho clic y además presentar el contenido asociado a ese tab activo. Para lo cual, voy a crear una función que se encargue de todo. Deberá recibir de algún modo la pestaña que se debe activar y básicamente hará estas acciones: • Quitar la clase "activa" de todas las pestañas (realmente sólo necesitaría quitar la clase "activa" del tab que estaba seleccionado antes de esta llamada a la función, pero como no sé cuál es, pues simplemente quito la clase "activa" de todas las pestañas. Eso es todo. Pero para hacerlo antes voy a tener que crear unos arrays con todos los identificadores de las pestañas (etiquetas LI) y los contenidos asociados a éstas (etiquetas DIV que hay dentro del elemento "contenedorpestanas").
Quote var idsPestanas = ["p1", "p2", "p3", "otrapestana"]; var idsContenedores = ["cont1", "cont2", "cont3", "cont4"]; Estos arrays nos servirán para iterar sobre todos los elementos de todas las tabs. Y ahora podemos ver la función cambiaPestana(), que recibe el índice de la pestaña que ha sido pulsada. Este índice es un número entero que corresponde con el valor de la nueva pestaña que tenemos que poner como activa. Recordemos que los Arrays comienzan por el índice cero, por lo que para activar la primera pestaña se tendrá que enviar a la función el índice de array con valor cero (0) y para activar la última, se debería pasar el índice tres (3), que en este caso corresponde con la cuarta y última pestaña.
Quote function cambiaPestana(id){ //borro la clase activa de todas las pestañas idsPestanas.each(function(item){ $(item).removeClass("activa"); }); //coloco la clase activa a la pestaña que se recibe por parámetro $(idsPestanas[id]).addClass("activa"); //oculto el contenido de todos los contenedores asociados a las pestañas idsContenedores.each(function(miItem){ $(miItem).addClass("nover"); }); //en el contenido que está asociado con la pestaña activa, quito la clase nover $(idsContenedores[id]).removeClass("nover"); } El código lo hemos comentado para que se pueda entender mejor. No obstante, utiliza diversas llamadas a métodos de distintas clases Mootools para crear el dinamismo que resultaría imposible explicar si no se conoce el mencionado framework Javascript. En concreto hace uso del método each() de Native Array, para recorrer todos los elementos de los arrays de identificadores creados anteriormente. También hace uso de la clase Element, para seleccionar elementos con la función dólar y para añadir y quitar clases CSS de los elementos de la página con los métodos addClass() y removeClass(). Por último, debemos realizar las llamadas a esta función, cuando se hace clic sobre los enlaces de las pestañas. Eso lo hemos conseguido con los atributos onclick de los enlaces, en los que hemos escrito la sentencia Javascript para llamar a la función pasando el índice de la pestaña que se debe activar.
Quote onclick="cambiaPestana(0)" ... onclick="cambiaPestana(3)" Y sobre los href de los enlaces, decir que se llama a una función void() de Javascript, que no devuelve nada, para que simplemente el enlace no haga nada. Ya lo tenemos todo, así que les recomendamos acceder al ejemplo en marcha, donde podrán ver también el código fuente completo de este sistema. Mootools y reutilización del código Las vírgenes tienen muchas navidades pero ninguna Nochebuena.
|
Efectos con Mootools Comenzamos a estudiar los efectos que se pueden hacer con Mootools con la clase Fx y varias otras que heredan de ella. Para estudiar los efectos en Mootools, comenzaremos explicando cómo hacer cosas sencillas, como hacer un fundido de opaco a transparente para ocultar un elemento. Luego nos detendremos más en los detalles y aprenderemos a utilizar las clases que heredan de Fx con todas sus posibilidades y comprobaremos que las herramientas de Mootools son bastante potentes. Clase Fx Sin embargo, será importante conocer un poco esta clase, o al menos tenerla en cuenta cuando consultemos la documentación de Mootools, porque tiene muchas cosas que son comunes a todas las clases derivadas para hacer efectos. Clases que heredan de Fx Fx.CSS Fx.Tween Fx.Morph Fx.Transitions Ejemplos sencillos de efectos con Mootools Cuando tenemos la clase Fx.Tween cargada, se crean unos métodos nuevos para los elementos de la página (clase Element), para hacer efectos muy recurridos, como fundidos o resaltados. Estos métodos los podemos invocar sobre cualquier elemento, como cualquier otro método de los de la clase Element. Método fade() Las vírgenes tienen muchas navidades pero ninguna Nochebuena.
|
Método fade() para hacer un efecto de fundido Aprendemos a utilizar el método fade() de la clase Element de Mootools, que sirve para hacer efectos de fundido con transparencia. Estamos viendo una serie de métodos para hacer efectos rápidos en Mootools. En el capítulo anterior dimos una introducción a lo que son los efectos de Mootools y queríamos empezar mostrando cómo hacer efectos recurridos y sencillos. Fade() es un método muy rápido de usar y que sin duda resulta muy útil y bastante atractivo visualmente. Se trata de hacer lo que en inglés llaman un "fade in" o "fade out", que no es más que un efecto que muestra u oculta un elemento, con un fundido de transparente a opaco, o viceversa. El método fade() se puede utilizar sobre cualquier elemento de la página que tengamos seleccionado o bien con la función dólar $() o la función dolardolar $$(). Por ejemplo, tenemos un elemento como este:
Quote <div id="mielemento"> Este elemento... </div> Podríamos hacer un fundido de opaco a transparente con la sentencia:
Quote $("mielemento").fade("out"); Ahora, para hacer un fundido de transparente a opaco, se puede invocar el método fade() de esta manera:
Quote $("mielemento").fade("in"); Un ejemplo completo de uso de fade() lo podemos ver a continuación, en el que tenemos un elemento y dos enlaces, uno para hacer un "fade in" y otro para hacer un "fade out", sobre ese elemento:
Quote <html> <head> <title>Fade en mootools</title> <script src="../mootools-1.2.3-core-yc.js" type="text/javascript"></script> <script> window.addEvent("domready", function(){ //creo un evento para el enlace con id=fadeout $("fadeout").addEvent("click", function(evento){ evento.preventDefault(); //invoco el método fade sobre el elemento que quiero ocultar $("mielemento").fade("out"); }); //creo un evento para el enlace con id=fadein $("fadein").addEvent("click", function(evento){ evento.preventDefault(); //invoco el método fade sobre el elemento que quiero mostrar $("mielemento").fade("in"); }); }); </script> </head> <body> <a href="#" id="fadeout">Fade out</a> | <a href="#" id="fadein">Fade in</a> </body> Las vírgenes tienen muchas navidades pero ninguna Nochebuena.
|
| |||
| |||