¿Aún no puedes crear un complemento jQuery?

Es duro. Lees tutorial tras tutorial, pero todos asumen que sabes más de lo que realmente sabes. Cuando terminas, te sientes más confundido de lo que inicialmente estabas. ¿Por qué creó un objeto vacío? ¿Qué significa cuando pasas "opciones" como parámetro? ¿Qué hacen realmente las "configuraciones predeterminadas"??

Nunca temas; Voy a mostrarte exactamente cómo crear tu propio complemento de "información sobre herramientas", a petición de uno de nuestros fieles lectores..




¿Por qué crearía un complemento en primer lugar??

Podría ayudar pensar en los complementos de la misma manera que lo haría con las funciones. ¿Alguna vez te has encontrado repitiendo los mismos procedimientos?
para sitio tras sitio? Tal vez haya creado su propio sistema de pestañas que le gusta usar. En lugar de escribir el mismo código de tiempo y
una vez más, ¿no sería más fácil si pudiéramos convertir su bloque de código largo en una sola línea? Eso es esencialmente lo que un plugin hace por nosotros..
Permite la reutilización, que es de suma importancia, si desea mantener su salario por hora alto!

Paso 1: El marcado

Cree un nuevo proyecto en su editor de código favorito y pegue el siguiente html.

      Todavía no puedes crear un complemento jQuery?   

El punto de uso de Lorem Ipsum es que tiene una distribución más o menos normal de letras, en lugar de usar 'Contenido aquí, contenido aquí', lo que parece un inglés legible. Muchos paquetes de publicación de escritorio y editores de páginas web ahora usan Lorem Ipsum como su modelo de texto predeterminado, y una búsqueda de 'lorem ipsum' descubrirá muchos sitios web aún en su infancia. Varias versiones han evolucionado a lo largo de los años, a veces por accidente, a veces a propósito (humor inyectado y similares).

Explicación

Este código es bastante simple; por lo que no requiere demasiado de una visión general.

  • Haz referencia a un archivo CSS que crearemos en breve. Esto nos permitirá diseñar nuestra descripción..
  • Agregue un texto genérico que contenga algunas etiquetas de anclaje. Tenga en cuenta que algunos de ellos contienen una clase de "información sobre herramientas".
    Esto es importante!
  • Importar jQuery desde CDN de Google.
  • Llame a nuestra información sobre herramientas con jQuery. No te preocupes por esto todavía. Te lo explicaré en breve.

Paso 2: Llamando al Plugin

Por lo general, encuentro que es más fácil compilar mi complemento si primero determino cómo lo llamaré. Considere el siguiente código.

 

Decidí que quiero que el nombre de mi complemento simplemente se llame "información sobre herramientas". También he determinado que quiero poder pasar en unos pocos
Parámetros para personalizar mi tooltip ligeramente. Esto será puramente opcional para el usuario sin embargo. Si lo prefiere, él o ella podría simplemente escribir:

 

En este caso, el defecto las opciones serán utilizadas.

Paso 3: Construyendo el Plugin

Así que ahora que sabemos cómo se llamará el complemento, ¡sigamos adelante y hagámoslo! Cree un nuevo archivo en su proyecto y llámelo "jQuery.tooltip.js". Hay ciertas convenciones de nomenclatura al crear un complemento que potencialmente serán utilizados por otros. Comenzamos escribiendo 'jQuery', seguido del nombre de nuestro complemento. Sin embargo, estoy seguro de que te das cuenta de que miles de personas han creado su propio complemento de información sobre herramientas. Podría determinar que es necesario prefaciar "información sobre herramientas" con una cadena única; tal vez sus iniciales. En cualquier caso, no importa demasiado. Eres libre de nombrar tu plugin como desees.

Pasando jQuery como un parámetro

 (función ($) ... código) (jQuery);

Primero debemos asegurarnos de que el símbolo "$" no nos meta en ningún problema. ¿Y si también estuviéramos usando otras bibliotecas de Javascript en nuestra aplicación? ¿Alguna vez has pensado en eso? En tales casos, tendríamos que cambiar cada "$" en nuestro documento a "jQuery". El único problema es que esta es una solución bastante descuidada. En su lugar, vamos a crear una función anónima que invoque a uno mismo y pase "$" como un alias. De esa manera, somos libres de usar "$" todo lo que queramos sin tener que preocuparnos por ningún conflicto.

Nombrando el Plugin

 $ .fn.tooltip = function (opciones) 

Dentro de nuestro envoltorio, debemos declarar nuestro nuevo complemento y hacerlo igual a la siguiente función. Podemos realizar esta tarea escribiendo jQuery.fn (abreviatura de prototipo).el nombre de nuestro plugin.

¿Recuerdas cuando especifiqué que el usuario debería poder hacer pequeñas modificaciones a la información sobre herramientas? Esas modificaciones serán almacenadas dentro del parámetro "opciones".

Configuración de los valores predeterminados

 var defaults = background: '# e3e3e3', color: 'black', redondeado: false,

Es probable que el usuario no pueda especificar ninguna opción. Por lo tanto, vamos a establecer nuestras propias opciones "predeterminadas". Debido a que este es un tutorial para principiantes, no haremos demasiado aquí. Sobre todo, esto es demostrar lo que es posible. Estamos permitiendo que el usuario seleccione un color de fondo, un color y si la información sobre herramientas está redondeada o no.

Más adelante en nuestro código, cuando deseamos acceder a estos valores, simplemente podemos escribir: defaults.rounded.

Fusionar los valores predeterminados con las opciones

Entonces, ¿cómo podemos determinar si el usuario agrega sus propias opciones? La respuesta es que debemos combinar 'valores predeterminados' con 'opciones'.

 settings = $ .extend (, valores predeterminados, opciones);

Hemos creado una nueva variable llamada "configuración", y le hemos dicho a jQuery que combine 'valores predeterminados' y 'opciones', y que coloque los resultados en un nuevo objeto. Al fusionarse, las "opciones" seleccionadas por el usuario tendrán prioridad sobre los valores predeterminados.
Quizás se pregunte por qué no he agregado "var" antes de la configuración. Técnicamente, no es obligatorio, aunque se considera la mejor práctica. Si se desplaza un poco hacia arriba, verá que después de nuestro objeto predeterminado, agregué una coma. Al hacerlo, podemos continuar creando más variables sin la necesidad de 'var' cada vez. Por ejemplo…

 var joe = ; var es = ; var bueno = ;

puede llegar a ser…

 var joe = , es = , bueno = ;

Para cada…

 this.each (function () var $ this = $ (this); var title = this.title;

Es importante tener en cuenta que el conjunto envuelto que el usuario pasa a este complemento puede contener muchos elementos, no solo uno. Debemos asegurarnos de que usamos un método para cada declaración (o el método "cada" de jQuery) para recorrer el código.

Comenzamos nuestra nueva función almacenando $ (esto). No solo nos ahorrará algunos caracteres, sino que también acelerará las cosas, aunque sea un poco. No es obligatorio, pero se considera una buena práctica. Mucha gente pregunta: "¿Por qué agrega el signo de dólar frente a su variable?". Hacemos esto para recordarnos que estamos trabajando con el objeto jQuery. Al hacerlo, recuerdo que puedo llamar a cosas como: $ this.click () ;. A continuación, estoy almacenando el valor del atributo de título en una variable llamada "título". Verás por qué debemos hacer esto en un momento..

Comprobación de errores

 if ($ this.is ('a') && $ this.attr ('title')! = ") this.title ="; $ this.hover (función (e) 

Es fácil olvidar a qué se refiere esto. Cuando olvide, simplemente regrese a la forma en que llama al método "información sobre herramientas".

 $ ('a.tooltip'). tooltip ();

Podemos ver aquí que $ se refiere a cada etiqueta de anclaje que tiene una clase de "información sobre herramientas".

Volver al código; si el elemento en el conjunto envuelto es, de hecho, una etiqueta de anclaje, Y su atributo 'título' no está vacío, entonces ejecute algún código. Esto es bastante autoexplicativo. No quiero ejecutar un montón de código si el usuario pasa accidentalmente una imagen. Además, no quiero crear mi cuadro de información sobre herramientas si no hay nada que mostrar!

Dentro de mi declaración "si", estoy configurando el atributo "título" de la etiqueta de anclaje igual a nada. Esto detendrá la carga de herramientas predeterminada del navegador. A continuación, estoy agregando un detector de eventos para cuando $ this, o la etiqueta de anclaje, se desplace el cursor sobre. Cuando lo es, creamos una nueva función y pasamos el objeto de evento como un parámetro. No te preocupes por esto por ahora, te lo explicaré más tarde..

Creando Nuestra Sugerencia

 var title = $ this.attr ('title'); PS
') .appendTo (' body ') .hide () .text (title) .css (backgroundColor: settings.background, color: settings.color, top: e.pageY + 10, izquierda: e.pageX + 20 ) .fadeIn (350);

He creado una variable llamada 'título' y la hice igual a cualquier valor que esté contenido dentro del atributo 'título' de la etiqueta de anclaje. Esto no es realmente necesario, pero me ayuda..

Cuando agregamos etiquetas html a nuestra declaración jQuery, podemos crear un nuevo elemento, en lugar de recuperar uno. Estamos creando una nueva etiqueta div con un id de 'información sobre herramientas'. A continuación, utilizaremos las maravillosas habilidades de cambio de jQuery para realizar un montón de procedimientos con facilidad..

  • .appendTo ('cuerpo') : Tome el elemento que acabamos de crear y agréguelo al elemento del cuerpo, justo antes de la etiqueta de cierre 'body'.
  • .esconder() : Quiero que nuestra información sobre herramientas se difumine. Para lograr este efecto, primero debe tener su pantalla configurada en ninguno.
  • .texto (título) : Hemos creado nuestra etiqueta div; pero todavía está vacío. Vamos a añadir algún texto. Especificamos que todo lo que estaba contenido en el atributo del título debe colocarse en este div.
  • .css (…) : Estamos configurando las posiciones de color de fondo, color, superior e izquierda de nuestra información sobre herramientas con CSS. ¿Recuerda antes cuando fusionamos la configuración predeterminada con las opciones seleccionadas por el usuario en un nuevo objeto de 'configuración'? Eso entrará en juego ahora. El color de fondo es igual a 'settings.background'; el color es 'settings.color'. Finalmente, debemos declarar en qué lugar de la página debe aparecer la información sobre herramientas. Podemos utilizar el objeto evento. Contiene dos propiedades llamadas 'pageY' y 'pageX'. Estos contienen los valores de las coordenadas exactas de donde se desplazó el ancla. Para agregar un poco de relleno, agregaremos 10px y 20px, respectivamente.
  • .fadein (350) : En el transcurso de aproximadamente un tercio de segundo, nuestra información sobre herramientas se desvanecerá.
 if (defaults.rounded) $ ('# tooltip'). addClass ('rounded'); 

Por defecto, nuestra opción 'redondeada' está configurada en 'falso'. Sin embargo, si 'defaults.rounded' devuelve true (lo que significa que el usuario agregó este parámetro), debemos agregar una clase de 'redondeado' a nuestro archivo CSS. Vamos a crear ese archivo pronto.

Ratón fuera

 , function () // mouse out $ ('# tooltip'). hide (); );

"Hover" acepta dos funciones: pasar el mouse por encima y el mouse por fuera. Hemos agregado el código apropiado para cuando el usuario se mueve sobre nuestra etiqueta de anclaje seleccionada. Pero, también necesitamos escribir algún código que elimine la información sobre herramientas una vez que el mouse haya dejado la etiqueta de anclaje.

Movimiento del ratón

Sería bueno forzar el cuadro de información sobre herramientas para que cambie cuando se mueva el mouse. Vamos a implementar eso rápidamente.

 $ this.mousemove (function (e) $ ('# tooltip'). css (top: e.pageY + 10, izquierda: e.pageX + 20););

Cuando el mouse se mueve sobre la etiqueta de anclaje, cree una función y, una vez más, pase el objeto de evento como un parámetro. Encuentra el elemento 'tooltip', y ajusta su CSS. Debes darte cuenta de que es el código exacto que escribimos anteriormente. Simplemente estamos restableciendo estos valores a los nuevos. Ingenioso, eh?

Permitir Chaning

Debemos permitir que el usuario continúe encadenando después de que se llame "información sobre herramientas". Por ejemplo:

 $ ('a.tooltip'). tooltip (). css (…) .remove ();

Para permitir este encadenamiento, debemos devolver "esto". Justo antes de que cierre la llave, agregue "devuelva esto";.

Plugin Completo!

Acabas de crear con éxito un plugin completamente funcional. No es demasiado avanzado, pero nos permitió revisar algunas características clave. Aquí está el código final.

JQuery final

 (función ($) $ .fn.tooltip = función (opciones) var defaults = background: '# e3e3e3', color: 'black', rounded: false, settings = $ .extend (, defaults, opciones); this.each (function () var $ this = $ (this); var title = this.title; if ($ this.is ('a') && $ this.attr ('title')! = ") this.title ="; $ this.hover (function (e) // mouse over $ ('
') .appendTo (' body ') .text (title) .hide () .css (backgroundColor: settings.background, color: settings.color, top: e.pageY + 10, izquierda: e.pageX + 20 ) .fadeIn (350); if (settings.rounded) $ ('# tooltip'). addClass ('rounded'); , function () // mouse out $ ('# # tooltip'). remove (); ); $ this.mousemove (function (e) $ ('# tooltip'). css (top: e.pageY + 10, izquierda: e.pageX + 20);); ); // devuelve el objeto jQuery para permitir el encadenamiento. devuelve esto ) (jQuery);

Paso 4: CSS

El último paso es agregar solo un poco de CSS para pretender nuestra información sobre herramientas. Cree un nuevo archivo CSS llamado 'default.css', y pegue lo siguiente en.

 #tooltip background: # e3e3e3 url (… /images/search.png) no se repite 5px 50%; borde: 1px sólido #BFBFBF; flotador izquierdo; tamaño de fuente: 12px; ancho máximo: 160 px; Acolchado: 1em 1em 1em 3em; posición: absoluta; . redondeado -moz-border-radius: 3px; -webkit-border-radius: 3px; 

Nada demasiado complicado aquí. Estoy haciendo referencia a una imagen de fondo que contiene la lupa estándar de 'búsqueda'. Le invitamos a descargar el código fuente para utilizarlo. Además, he agregado un poco de relleno, un ancho máximo y un tamaño de fuente. La mayor parte de esto se reduce a la preferencia. Eres libre de editarlo como quieras..

La única propiedad vital es "posición: absoluta". Anteriormente, establecimos los valores "top" y "left" con jQuery. ¡Para que esa posición tenga efecto, debemos establecer la posición en absoluta! Esto es importante. Si no lo haces, no funcionará..

Gracias por leer

Para todos aquellos que me han enviado un correo electrónico solicitando este tutorial, espero que haya sido de alguna manera una ayuda. Si no me expliqué lo suficientemente bien, asegúrese de ver el screencast asociado y / o hacer un comentario. Trataré de ayudarte lo mejor que pueda. Hasta la proxima vez…

Listo para el nivel 2?

Si tiene una comprensión sólida de las técnicas presentadas en este tutorial, ¡está listo para seguir adelante! Considere inscribirse en una membresía de Net Plus para ver un tutorial avanzado, de Dan Wellman, que le enseñará cómo crear un complemento jQuery más complicado. También viene con un screencast asociado. Asegúrate de registrarte ahora!

  • Suscríbase a la fuente RSS de NETTUTS para obtener más artículos y artículos de desarrollo web diarios..