Anuncios

Bienvenidos sean a este post, hoy continuaremos con este tema.

Anuncios

Proveyendo parametros de metodos flexibles

Cuando hablamos de usar un plug-in este post, una de las cosas que pudimos hacer es dar una mejor conducta de que realmente queriamos gracias a los parametros, vimos que un plug-in bien realizado puede ser mas maleable a traves de valores predeterminados establecidos por nosotros pero que a su vez pueden ser modificados cuando queramos, esto es algo a tener en cuenta al momento de crear nuestros plug-in.

Anuncios

Para entender este concepto vamos a hacerlo mediante un ejemplo y para ello tomaremos el ejemplo que estuvimos hasta el post anterior, en caso de no tenerlo les dejo un link para descargar los archivos:

Anuncios

Simplemente en un directorio extraigan todo los archivos, con esto realizado vamos a trabajar en el ejemplo, para este caso vamos a hacer algo que se podria realizar tranquilamente con CSS pero para ponerlo en practica vamos a realizarlo mediante script, para ello iremos al archivo plugin.js y agregaremos el siguiente codigo dentro del entorno jQuery:

$.fn.sombra = function() {		
	return this.each(function() {
		var $elemento = $(this);
		for (var i=0; i < 5; i++) {
			$elemento
			.clone()
			.css({
				position: 'absolute',
				left: $elemento.offset().left + i,
				top: $elemento.offset().top + i,
				margin: 0,
				zIndex: -1,
				opacity: 0.1
			})
			.appendTo('body');
		}
	});
};
Anuncios
Anuncios

Aqui definimos un metodo llamado sombra, observen que usamos lo visto en el post anterior donde cada elemento que procese lo devolvera, nuestro primer paso sera crear un objeto con el elemento actual que se obtiene mediante this, despues tenemos un ciclo donde haremos cinco pasadas, en este caso primero tomamos el objeto a trabajar, le aplicamos el metodo clone para copiarlo, despues mediante el metodo css le estableceremos un nuevo estilo, este es basicamente el encargado de hacer la magia de la sombra, y por ultimo lo agregamos al body, como pueden ver de una manera sencilla lo logramos ahora para aplicarlo vamos al archivo codigo.js y agregaremos el siguiente codigo:

$(document).ready(function() {
	$('h1').sombra();
});
Anuncios

En este caso sera simplemente aplicar el nuevo metodo al titulo que se encuentra en el body de la pagina, si lo probamos se vera de la siguiente forma

Anuncios

Ya tenemos nuestro metodo base, lo siguiente sera comenzar a trabajar con ellos, para eso debemos pasar al siguiente tema.

Anuncios

Las opciones del objeto

Vamos a aplicar algo similar a lo que vimos en los posts de ajax, donde pasabamos parametros por medio de propiedades aca sera algo similar pero debemos hacer algunas modificaciones pequeñas, para ello vamos a ir primero al archivo codigo.js y modificaremos el bloque anterior de la siguiente forma:

$(document).ready(function() {
	$('h1').sombra({
		copias: 3,
		opacidad: 0.2
	});
});
Anuncios

Observen que la unica modificacion fue agregar entre llaves las propiedades que contendran los parametros para nuestro metodo, nuestra siguiente modificacion sera en el archivo plugin.js donde cambiaremos a la funcion de la sombra de la siguiente manera:

$.fn.sombra = function(opciones) {		
	return this.each(function() {
		var $elemento = $(this);
		for (var i=0; i < opciones.copias; i++) {
			$elemento
			.clone()
			.css({
				position: 'absolute',
				left: $elemento.offset().left + i,
				top: $elemento.offset().top + i,
				margin: 0,
				zIndex: -1,
				opacity: opciones.opacidad
			})
			.appendTo('body');
		}
	});
};
Anuncios

Primero agregamos el argumento opciones para poder trabajar las propiedades que establecimos en el codigo anterior, el primero uso sera en el bucle for donde eliminamos la cantidad de vueltas y aqui usamos a copias desde opciones y el otro cambio es en opacidad donde usaremos la propiedad opacidad, si lo prueban ahora se vera de la siguiente forma

Anuncios

Entonces ahora ya tenemos un metodo que permite variar en base a los parametros que le pasemos pero esto lo podemos mejorar aun mas, pasemos al proximo tema.

Anuncios

Valores de parametros predeterminados

Como dice el titulo vamos a establecer unos valores predeterminados para cuando el usuario no informe alguno, para ello primero modificaremos al metodo sombra de la siguiente manera:

$.fn.sombra = function(opc) {
	var predet = {
		copias: 5,
		opacidad: 0.1
	};
	var opciones = $.extend(predet, opc);
		
	return this.each(function() {
		var $elemento = $(this);
		for (var i=0; i < opciones.copias; i++) {
			$elemento
			.clone()
			.css({
				position: 'absolute',
				left: $elemento.offset().left + i,
				top: $elemento.offset().top + i,
				margin: 0,
				zIndex: -1,
				opacity: opciones.opacidad
			})
			.appendTo('body');
		}
	});
};
Anuncios
Anuncios

Primero cambiaremos el nombre del argumento que recibe las propiedades para las opciones, primero definiremos un objeto con las propiedades iguales a las que recibimos pero estableceremos un valor para cada uno, despues definiremos un objeto llamado opciones, igual al codigo anterior, donde usaremos extend para recibir los valores predeterminados que establecimos antes y los valores que podemos pasar por medio del llamado al metodo, el resto del metodo sigue siendo el mismo que antes, pero la diferencia radica en que ahora nunca estaremos sin un valor, antes de probarlo vamos a cambiar el bloque de codigo.js donde llamamos a sombra de la siguiente manera:

$(document).ready(function() {
	$('h1').sombra({
		opacidad: 0.25
	});
});
Anuncios

En este caso solo le pasaremos la opacidad pero tomaremos el valor de copias de los valores predeterminados, si lo probamos ahora se vera de la siguiente manera

Anuncios

Ya podemos pasar valores, tenemos valores predeterminados para cuando no lo informen pero esto esta lejos de terminar, pasemos al siguiente tema.

Anuncios

Funciones callback

Hasta aca hemos cubierto parametros que son solo valores pero si necesitamos manipular informacion mas compleja? bueno en este caso entran en accion las funciones callback, dado que nos permiten manejar una gran cantidad de informacion sin necesidad de modificar mucho al plug-in, para esto solo debemos aceptar al objeto function como parametro, para entender el concepto vamos a modificar al metodo sombra de la siguiente forma:

$.fn.sombra = function(opc) {
	var predet = {
		copias: 5,
		opacidad: 0.1,
		copiarOffset: function(indice) {
			return {x: indice, y: indice};
		}
	};
	var opciones = $.extend(predet, opc);
		
	return this.each(function() {
		var $elemento = $(this);
		for (var i=0; i < opciones.copias; i++) {
			var offset = opciones.copiarOffset(i);
			$elemento
			.clone()
			.css({
				position: 'absolute',
				left: $elemento.offset().left + offset.x,
				top: $elemento.offset().top + offset.y,
				margin: 0,
				zIndex: -1,
				opacity: opciones.opacidad
			})
			.appendTo('body');
		}
	});
};
Anuncios
Anuncios

Con respecto al codigo anterior tenemos pocas variaciones, primero agregarmos una nueva propiedad llamada copiarOffset, este sera un tipo function y recibira un valor, este valor lo devolveremos en dos parametros llamado x e y de lo cual hablaremos en un rato, nuestro siguiente cambio sera dentro del bucle for donde ahora estableceremos un objeto llamado offset y este almacenara los valores de copiarOffset y como parametro le pasaremos el valor de cada pasada, la siguiente modificacion sera en left y top donde reemplazaremos el incremento de i con el offfset.x y offset.y respectivamente, si lo prueban deberia seguir funcionando de la misma forma, ahora vamos a cambiar a copiarOffset de la siguiente forma:

copiarOffset: function(indice) {
	return {x: -indice, y: -2 * indice};
}
Anuncios

Esto cambiara la ubicacion de nuestras sombras, por lo tanto si vuelven a probar la pagina se vera de la siguiente forma

Anuncios

Observen como de una forma muy simple cambiamos la orientacion de la sombra, y asi como esto podemos variar otras particularidades de nuestro metodo, solo nos resta hablar sobre un tema.

Anuncios

Valores predeterminados personalizables

En este post vimos como establecer unos valores predeterminados por fuera del metodo del plug-in, en esta ultima parte veremos como podemos agregar esta opcion a nuestro metodo, para ello debemos ir al archivo plugin.js y modificaremos el metodo sombra de la siguiente forma:

$.fn.sombra = function(opc) {
	var opciones = $.extend({}, $.fn.sombra.predet, opc);
		
	return this.each(function() {
		var $elemento = $(this);
		for (var i=0; i < opciones.copias; i++) {
			var offset = opciones.copiarOffset(i);
			$elemento
			.clone()
			.css({
				position: 'absolute',
				left: $elemento.offset().left + offset.x,
				top: $elemento.offset().top + offset.y,
				margin: 0,
				zIndex: -1,
				opacity: opciones.opacidad
			})
			.appendTo('body');
		}
	});
};

$.fn.sombra.predet = {
	copias: 5,
	opacidad: 0.1,
	copiarOffset: function(indice) {
		return {x: indice, y: indice};
	}
};
Anuncios
Anuncios

Los cambios son pocos pero muy evidentes, primero «eliminamos» a la variable predet, aunque no es tan asi, despues modificamos a la variable opciones, primero pasamos un objeto vacio al cual modificaremos con la funcion extend, de lo contrario trabajara sobre sombra y no queremos esto, despues pasamos los nuevos valores predeterminados, observen que pasamos una ruta completa que incluye al nombre de sombra, y luego pasamos las opciones recibidas como argumento, con esto tenemos todos los valores en opciones sean predeterminados o pasados como argumento, el resto sigue igual que antes pero despues del metodo tenemos el nuevo bloque, en este caso definiremos el objeto de los valores predeterminados, basicamente es el mismo que teniamos en la variable anterior que eliminamos, pero observen que ahora x e y solo reciben el valor del argumento, nuestro siguiente paso sera ir al archivo codigo.js y modificaremos el bloque donde llamamos a sombra de la siguiente manera:

$(document).ready(function() {
	$.fn.sombra.predet.copias = 10;
	$('h1').sombra({
		copiarOffset: function(index) {
			return {x: -index, y: index};
		}
	});
});
Anuncios

Observen que antes de llamar a sombra establecemos el valor predeterminado de copias, despues al momento de llamar a sombra establecemos una nueva formula para copiarOffset, con esta modificacion realizada podemos ver como quedo ahora nuestra pagina

Anuncios

Ahora pueden probar de jugar modificando el objeto de copiarOffset o establecer otros valores predeterminados para ver como varia, ahora si tiene realmente un plug-in completo y funcional, antes de finalizar les dejo un archivo con todos los archivos del proyecto y codigos finales de este post:

Anuncios

En resumen, hoy hemos visto como agregar metodos para trabajar con los elementos DOM, hemos pasado desde uno muy basico hasta uno muy completo que no solo tiene valores predeterminados sino que podemos establecer unos propios, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50