Mostrando entradas con la etiqueta jQuery Plugins. Mostrar todas las entradas
Mostrando entradas con la etiqueta jQuery Plugins. Mostrar todas las entradas

martes, 22 de septiembre de 2015

Upload Multiple Images Ajax - Vista previa y subida múltiple de imágenes


El plugin upload-multiple-images-ajax te permite realizar subidas mútiples de imágenes a través de la tecnología ajax, este plugin está desarrollado con jQuery y PHP, entre sus características puedes encontrar la posibilidad de validar las imágenes tanto del lado del cliente como del servidor, por ejemplo, indicar el tipo de imágenes permitidas, el tamaño mínimo y máximo, el número máximo de imágenes que puede ser subidas, ... y por supuesto la previsualización de las imágenes antes de subirlas, con la posibilidad de quitar alguna de ellas si no te gusta a través de un botón de eliminar, el plugin es totalmente compatible con los estilos CSS de bootstrap 3.

Para descargar el plugin puedes hacerlo a través de Github siguiendo el siguiente enlace: https://github.com/ManuDavila/upload-multiple-images-ajax




viernes, 18 de septiembre de 2015

Ámbito y uso de la palabra this en el desarrollo de plugins jQuery


Un plugin jQuery tiene un propósito, lógicamente no vas a crear un plugin para realizar una salida "Hola Mundo", se supone que el trabajo que tienes entre manos es más complejo que eso, de no ser así, mejor ponerse a cotillear en el mural de Facebook, ¡Nooo! que se pierde el tiempo, mejor inventar algo ó por qué no, conocer el ambito y uso de la palabra reservada this en el desarrollo de plugins con jQuery.

Un plugin tan básico como el siguiente te dá la estructura básica para cosas más complejas, el típico "Hola Mundo" cansa ...

(function($){
	/* Método */
	$.fn.holamundo = function(){
		this.html("Hola Mundo cansino");
	};
})(jQuery);

$(function(){
	/* Llamar al método */
	$("body").holamundo();
});


Dentro del método podéis encontrar la palabra this: this.html("Hola Mundo cansino"), curiosa esta palabra y tan útil, ya que con esta palabra estamos accediendo-referenciando al elemento que está llamando al método, en el ejemplo anterior a "body". this nos proporciona información, veamos como obtener un string con el selector que realiza la llamada ...


(function($){
	/* Método */
	$.fn._selector = function(){
	
		//Acceso al selector
		var self = this.selector;
		$(self).text(self);
		};
})(jQuery);

$(function(){
	/* Llamar al método */
	$("body")._selector();
});


Si ejecutáis este código vais a ver como os muestra en el body el string "body", hemos accedido a lo más íntimo del elemento con this.selector. A tener en cuenta la importancia de utilizar la palabra reservada var al declarar variables dentro de los métodos, en los métodos casi todo es intimidad, que nadie se cuele en tu casa y te forme un lío.

El ámbito de this dentro del método también es muy importante aclararlo, un método puede tener en su código interno la llamada a otro método, dentro de la llamada a este método this deja de referenciar al padre y se somete a este otro que convive en su interior, vean el siguiente ejemplo ...


<script>

(function($){
	/* Método */
	$.fn.egocentrico = function(){
	
			//Elemento padre
			this.prepend("<p>Aquí afuera soy el puto amo</p>");
			//Detectar el evento click para los elementos p hijos del elemento padre
			this.find("p").on("mouseover", function(){
				//p interno, this hace referencia al elemento p
				$(this).html("Aquí dentro mando yo");
			});
		};
})(jQuery);

$(function(){
	/* Llamar al método */
	$("#yo").egocentrico();
});
 
</script>

<div id="yo"><p>Que pasa chaval?</p></div>


Como podéis ver this funciona de forma distinta, según los casos descritos en el ejemplo, curioso también el método find() que nos permite acceder a los elementos internos, con un simple this.find("p"), en la construcción de plugins seguro que utilizaréis más de una vez el método find(), bueno y por el momento creo que está bien, es un buen comienzo conocer el ámbito y uso de la palabra reservada this en el desarrollo de plugins, si habéis entendido este concepto, ya tenéis las puertas abiertas para escribir vuestro propios plugins jQuery. A seguir investigando.


jueves, 17 de septiembre de 2015

jQuery explode effect - Efecto explosión


El método explode os permitirá dar un efecto explosión a elementos div.

El método explode poseé dos argumentos options y callback:

El argumento options tiene las siguientes opciones: pieces, columns, pixels y speed.

pieces: para indicar el número de piezas que conformarán la explosión.
columns: para indicar el número de columnas.
pixels: para indicar los píxeles de expansión de la explosión.
speed: para indicar la velocidad de la explosión.

Por defectos el argumento options viene configurado de la siguiente manera:


 var defaults = {
  pieces: 20,
  columns: 4,
  pixels: 50,
  speed: 500
 };

El argumento callback te permitirá incluir instrucciones una vez ha finalizado la animación.

A continuación puedes ver una serie de ejemplos, haz click sobre los elementos:



jQuery explode effect - Efecto explosión by jQuery Manual





Código fuente con el plugin y los ejemplos ...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<script type="text/javascript" src="https://code.jquery.com/jquery.js"></script>

<script>

(function($){
/* Author: Manu Dávila | Web: http://jquery-manual.blogspot.com */
$.fn.explode = function(options, callback){
 var defaults = {
  pieces: 20,
  columns: 4,
  pixels: 50,
  speed: 500
 };
 
 if (options === undefined){options = defaults;}
 if (callback === undefined){callback = function(){}};
 if (options.pieces === undefined){options.pieces = defaults.pieces;}
 if (options.columns === undefined){options.columns = defaults.columns;}
 if (options.pixels === undefined){options.pixels = defaults.pixels;}
 if (options.speed === undefined){options.speed = defaults.speed;}
 
 var background_color_piece = this.css("backgroundColor");
 var background_image_piece = this.css("backgroundImage");
 var border_radius_piece = this.css("borderRadius");
 
 this.append("<table style='width: 100%; height: "+this.height()+"px;'></table>");
 for (x = 0; x < (options.pieces/options.columns); x++)
 {
  content = '';
 
  var block = "style='background-color: "+background_color_piece+"; background-image: "+background_image_piece+"; padding: 5px; background-size: 100% 100%; background-repeat: no-repeat; border-radius: "+border_radius_piece+";'";
  
  for (y = 0; y < options.columns; y++)
  {
   content = content + "<td "+block+"></td>";
  }
 
  this.find("table").append("<tr>"+content+"</tr>");
 }
 
 this.css("background", "transparent");
 this.find("table").css({position: "relative"});
 this.find("table").animate({width: "+="+options.pixels, height: "+="+options.pixels, opacity: "-=1", left: "-="+(options.pixels/2), top: "-="+(options.pixels/2)}, options.speed, function(){callback(); $(this).remove();}); 
};
})(jQuery);

 $(function(){
 $("#box-1").on("click", function(){
   $(this).explode({columns: 8, pieces: 64, pixels: 100}, 
   function(){
   $("#box-1").css({backgroundColor: "orange"}); 
   });
 });
 
 $("#img-1").on("click", function(){
   $(this).explode({columns: 4, pieces: 16, pixels: 300, speed: 800}, 
   function(){ 
   $("#img-1").css({backgroundImage: "url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEsomZLE4xMMymwuehFoP1YS9-lZwWcdySyJ9cDSXWBAybrBhEAJoDf8RKMn8MvSPfyfp5eGEVkgBzvKv7o2dn7_iru_BtFgossaTVa8yNU0UpjM2s9-MIFhI0aMr-MI6u7Dzyf8PROKs/s1600/jquery.png)",  backgroundSize: "100% 100%"}); 
   });
 });
 
 $("#img-2").on("click", function(){
   $(this).explode({columns: 10, pieces: 108, pixels: 500, speed: 800}, 
   function(){ 
   $("#img-2").css({backgroundImage: "url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibogdTxELh9pPum7wBneX99F-q1ZDU-XA218Gx3EDpz0wDlcREqB-UiRNwhF56fLaEuE7_9YMBAtlhttj2C4IpH5za0l_HSaYULnq0I9sYcafBvxxaSl-l1P1mWpPRQRm2Npi1Fglvyog/s1600/color.jpeg)", backgroundSize: "100% 100%"}); 
   });
 });
 });
</script>

<style>
#box-1{
width: 150px; 
height: 150px; 
border-radius: 4px;
background-color: orange;
border-radius: 50%;
}

#img-1{
width: 160px; 
height: 160px; 
background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEsomZLE4xMMymwuehFoP1YS9-lZwWcdySyJ9cDSXWBAybrBhEAJoDf8RKMn8MvSPfyfp5eGEVkgBzvKv7o2dn7_iru_BtFgossaTVa8yNU0UpjM2s9-MIFhI0aMr-MI6u7Dzyf8PROKs/s1600/jquery.png);
background-size: 100% 100%;
border-radius: 50%;
}

#img-2{
width: 160px; 
height: 160px; 
background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibogdTxELh9pPum7wBneX99F-q1ZDU-XA218Gx3EDpz0wDlcREqB-UiRNwhF56fLaEuE7_9YMBAtlhttj2C4IpH5za0l_HSaYULnq0I9sYcafBvxxaSl-l1P1mWpPRQRm2Npi1Fglvyog/s1600/color.jpeg);
background-size: 100% 100%;
}


</style>

</head>
<body>
<div style="margin: 100px;">
<h2>jQuery explode effect - Efecto explosión by <a href="http://jquery-manual.blogspot.com">jQuery Manual</a></h2>
<div id="box-1"></div>
<hr />
<div id="img-1"></div>
<hr />
<div id="img-2"></div>
</div>
</body>
</html>


jueves, 10 de septiembre de 2015

jQuery rotate - Rotación de elementos con jQuery y CSS3 Animations


Hola, en esta ocasión os traigo un método (rotate) que sin duda os va a servir para dar rotación a cualquier elemento que necesitéis, todo ello gracias a CSS3 animations, elegante y configurable a vuestro gusto a través de la posibilidad de modificar sus propiedades: duration, delay, iteration_count, direction y timing_function. Los posibles valores para cada una de estas propiedades son los que ya vienen descritos en CSS3 animations. Por defecto el plugin viene configurado de la siguiente forma:

 var defaults = {
  duration: 1,
  delay: 0,
  iteration_count: 1,
  direction: "normal",
  timing_function: "linear"
 };


A continuación podéis ver algunos ejemplos de animación con jQuery rotate:


jQuery rotate basado en CSS3 animations

Básico

Propiedades: {duration: 3, delay: 3, iteration_count: "infinite", timing_function: "ease"}

Propiedades: {duration: 1, delay: 1, direction: "reverse", iteration_count: "infinite", timing_function: "ease-in"}

Propiedades: {duration: 1, delay: 0, direction: "alternate", iteration_count: 4, timing_function: "ease-in-out"}




El código fuente del plugin con los ejemplos ...

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<script type="text/javascript" src="https://code.jquery.com/jquery.js"></script>

<script>

(function($){ 
/* Author: Manu Dávila | Web: http://jquery-manual.blogspot.com */
 $.fn.rotate = function(options){
 var defaults = {
  duration: 1,
  delay: 0,
  iteration_count: 1,
  direction: "normal",
  timing_function: "linear"
 };
 if (options === undefined){options = defaults;}
 if (options.duration === undefined) {options.duration = defaults.duration;}
 if (options.delay === undefined) {options.delay = defaults.delay;}
 if (options.iteration_count === undefined) {options.iteration_count = defaults.iteration_count;}
 if (options.direction === undefined) {options.direction = defaults.direction;}
 if (options.timing_function === undefined) {options.timing_function = defaults.timing_function;}
 
 
 animation = "animation"+Math.floor((Math.random() * 1000000000000000) + 1);
 
 this.find(".style-rotate").remove();
 
 //Normal
 this.append("<style class='style-rotate'>@keyframes " + animation + " {from {transform: rotate(0deg);} to {transform: rotate(360deg);}}</style>");
 this.css("animation-name", ""+animation+"");
 this.css("animation-duration", ""+options.duration+"s");
 this.css("animation-delay", ""+options.delay+"s");
 this.css("animation-iteration-count", ""+options.iteration_count+"");
 this.css("animation-direction", ""+options.direction+"");
 this.css("animation-timing-function", ""+options.timing_function+"");
 //webkit: Chrome, Safari, Opera 
 this.append("<style class='style-rotate'>@-webkit-keyframes " + animation + " {from {-webkit-transform: rotate(0deg);} to {-webkit-transform: rotate(360deg);}}</style>");
 this.css("-webkit-animation-name", ""+animation+"");
 this.css("-webkit-animation-duration", ""+options.duration+"s");
 this.css("-webkit-animation-delay", ""+options.delay+"s");
 this.css("-webkit-animation-iteration-count", ""+options.iteration_count+"");
 this.css("-webkit-animation-direction", ""+options.direction+"");
 this.css("-webkit-animation-timing-function", ""+options.timing_function+"");
 //moz: firefox 
 this.append("<style class='style-rotate'>@-moz-keyframes " + animation + " {from {-moz-transform: rotate(0deg);} to {-moz-transform: rotate(360deg);}}</style>");
 this.css("-moz-animation-name", ""+animation+"");
 this.css("-moz-animation-duration", ""+options.duration+"s");
 this.css("-moz-animation-duration", ""+options.delay+"s");
 this.css("-moz-animation-iteration-count", ""+options.iteration_count+"");
 this.css("-moz-animation-direction", ""+options.direction+"");
 this.css("-moz-animation-timing-function", ""+options.timing_function+"");
 };
})(jQuery);

 $(function(){
  $("#box-1").rotate();
  $("#box-2").rotate({duration: 3, delay: 3, iteration_count: "infinite", timing_function: "ease"});
  $("#box-3").rotate({duration: 1, delay: 1, direction: "reverse", iteration_count: "infinite", timing_function: "ease-in"});
  $("#btn").on("click", function(){
   $("#box-4").rotate({duration: 1, delay: 0, direction: "alternate", iteration_count: 4, timing_function: "ease-in-out"});
  });
 });
</script>

<style>
 #box-1{
  width: 150px;
  height: 150px;
  background-color: orange;
 }
 
 #box-2{
  width: 150px;
  height: 150px;
  background-color: green;
 }
 
 #box-3{
  width: 150px;
  height: 150px;
  background-color: pink;
 }
 
 #box-4{
  width: 150px;
  height: 150px;
  background-color: yellow;
 }
</style>

</head>
<body>
<h1>jQuery rotate basado en CSS3 animations</h1>
<h3>Básico</h3>
<div id="box-1"></div>
<h3>Propiedades: {duration: 3, delay: 3, iteration_count: "infinite", timing_function: "ease"}</h3>
<div id="box-2"></div>
<h3>Propiedades: {duration: 1, delay: 1, direction: "reverse", iteration_count: "infinite", timing_function: "ease-in"}</h3>
<div id="box-3"></div>
<h3>Propiedades: {duration: 1, delay: 0, direction: "alternate", iteration_count: 4, timing_function: "ease-in-out"}</h3>
<button id="btn">Click me!!</button>
<div id="box-4"></div>
</body>
</html>


sábado, 26 de octubre de 2013

Vídeo Tutorial de como crear un Plugin con jQuery

En estos dos vídeos podréis seguir desde cero el proceso de construcción de plugins para jQuery.


  • Como crear un plugin con jQuery parte #1
  • Como crear un plugin con jQuery parte #2





sábado, 16 de febrero de 2013

Como crear funciones con jQuery

En estos dos vídeos podréis seguir desde cero el proceso de construcción de plugins para jQuery.


  • Como crear funciones con jQuery parte #1
  • Como crear funciones con jQuery parte #2