destacados

Gabriel Da Silva

Portafolio del ilustrador y director de arte brasileño, aunque afincado en Madrid, Gabriel Da Silva.

B&W Helmut Newton

Selección de fotografías en blanco y negro de uno de los fotógrafos más conocidos de las últimas décadas, Helmut Newton.

Judith Erwes

Fotógrafa afincada en Londres con un estilo que combina la moda, el humor y la estética retro.

Jody Rogac

Nacida en Inglaterra y criada en Canadá, Jody Rogac en la actualidad vive y trabaja en Brooklyn. Sus trabajo ha obtenido diversos galardones.

Publicaciones

Javascript: mostrar el contenido de un objeto

, , 03/02/2012 19:30:08

Para imprimir el contenido completo de un objeto, en Firefox, podemos utilizar la siguiente instrucción:

alert(object.toSource());

También se puede acceder a todos los elementos de un objeto mediante un bucle foreach. La siguiente función ImprimirObjeto monstrará un alert() que muestra todas las propiedades y los valores respectivos.

function ImprimirObjeto(o) {
  var salida = '';
  for (var p in o) {
    salida += p + ': ' + o[p] + '\n';
  }
  alert(salida);
}

Por ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>imprimir objeto</title>
<script type="text/javascript">
function ImprimirObjeto(o) {
  var salida = '';
  for (var p in o) {
    salida += p + ': ' + o[p] + '\n';
  }
  alert(salida);
}
var Objeto = {'algo1': 1, 'algo2': 2};
</script>
</head>
<body>
<a href="javascript:ImprimirObjeto(Objeto);">mostrar</a>
</body>
</html>

Ver ejemplo en funcionamiento » »

jQuery: Crear una caja flotante

, 11/01/2012 18:50:12

En este tutorial vamos a crear una caja flotante que se desplaza a medida que se hace scroll por la página. De ese modo el contenido de lo que haya en su interior siempre estará visible. Lo mejor es ver un ejemplo.

Ver ejemplo en funcionamiento » »

Lo primero es situar la caja al final de la página. Por ejemplo, justo antes del final del BODY.

<div id="caja_flotante">
    	<div id="cont_caja_flotante">
    		<a href="#"><img src="images/facebook.png" alt="facebook" /></a>
    		<a href="#"><img src="images/twitter.png" alt="twitter" /></a>
    		<a href="#"><img src="images/flickr.png" alt="flickr" /></a>
    	</div>
 </div>

En las propiedades CSS de esta caja la situamos en una posición absoluta:

#caja_flotante{
		position: absolute;
        top:0;
        left: 10px;
        border: 1px solid #CCC;
        background-color: #F2F2F2;
        width:100px;
}

Ahora tan sólo queda recurrir a jQuery:

$(document).ready(function() {
        var posicion = $("#caja_flotante").offset();
	    var margenSuperior = 15;
	     $(window).scroll(function() {
	         if ($(window).scrollTop() > posicion.top) {
	             $("#caja_flotante").stop().animate({
	                 marginTop: $(window).scrollTop() - posicion.top + margenSuperior
	             });
	         } else {
	             $("#caja_flotante").stop().animate({
	                 marginTop: 0
	             });
	         };
	     });
});

Atributo required en HTML5

, 10/01/2012 13:22:08

Required es un nuevo atributo de HTML5 que hace obligatorio que un campo sea rellenado antes de que se envie el formulario. De momento, las últimas versiones de Firefox, Opera y Safari, ya dan soporte a este atributo.

<form>
<label for="nombre">Dime tu nombre : </label>
<input name="nombre" type="text" required />
<input type="submit" value="Submit"/>
</form> 

Ver ejemplo en funcionamiento » »

CSS3 Animaciones

, 04/01/2012 18:43:07

Las nuevas características de CSS nos permiten añadir efectos de animación a la mayoría de elementos HTML, sin necesidad de Javascript o Flash. Por el momento, es compatible con los navegadores WebKit -incluyendo Safari, Safari para iOS y Chrome- y Firefox. Está previsto que Internet Explorer, a partir de su versión 10, también tenga soporte para este tipo de animaciones. Debido a que la tecnología es relativamente nueva, se debe añadir un prefijo con el motor del navegador. En nuestro caso, los ejemplos los realizaremos con los prefijos webkit y moz.

Las animaciones se apoyan en el uso de fotogramas clave -al igual que ocurre con Flash- para crear estados y realizar una transición entre ellos. Así para una animación de una única iteración crearíamos un punto de inicio y un punto final. La animación transcurriría entre estos dos puntos o estados.

PROPIEDADES

  • animation-name: En esta propiedad debemos indicar el nombre de la animación a la que hacemos referencia.
  • animation-duration: En esta propiedad especificamos el número de segundos o milisegundos de la animación, aceptando valores decimales. Siendo el valor por defecto 0, es decir sin animación.
  • animation-iteration-count: En esta propiedad debemos indicar cuantas veces queremos que se repita nuestra animación. Aceptando números enteros e "infinite" para que no deje de repetirse nunca.
  • animation-direction: Desde esta propiedad podemos definir si la dirección de nuestra animación es normal o por el contrario preferimos que sea a la inversa en ciclos alternos, alternate.
  • animation-timing-function: En esta propiedad podemos definir el modo en que se ejecutará nuestra animación. La curva de tiempo que se usa para calcular los diferente estados entre el inicio y el final. La opción por defecto es "ease". Las otras opciones son: "linear", "ease-in", "ease-out", "ease-in-out", y "cubic-bezier".
  • animation-fill-mode: Esta propiedad permite definir el estilo antes o después de que se ejecute la animación. La opción forwards aplicará el valor de las propiedades definidas en su último fotograma clave o en el 100%, después de ejecutar la iteración final de la animación. La opción backwards aplicará el valor de las propiedades definidas en el primer fotograma clave o en el 0%. La opción both aplicará el valor de las propiedades al principio y al final. La opción none no aplicará el valor de las propiedades.
  • animation-delay: En esta propiedad podemos definir en segundos o milisegundos con que retardo queremos activar nuestra animación.
  • animation-play-state: Con esta propiedad podemos pausar y volver a poner en marcha nuestra animación.

Existe una versión corta, denominada "Shorthand Property" que combina 6 de las propiedades en una sóla. Su sintaxis es:

[<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction>] [, [<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction>] ]

Para lograr una animación debemos conectar una animación a un elemento en la CSS. Aunque hasta el momento parezca que es un proceso complejo, vamos a realizar un primer ejemplo con una caja, y veremos que en realidad es bastante sencillo:

<div class="caja1"></div>

Ahora le asignamos el siguiente CSS:

.caja1{
	width:100px;
	height:100px;
	background:#FF0000;
	position:absolute;
	top:0;
}

Ahora establecemos una animación que denominaremos "mover_caja":

/* Para navegadores webkit */
@-webkit-keyframes mover_caja{
	0%{left:90%;}
	50%{left:10%;}
	100%{left:90%;}
}
/* Para Firefox */
@-moz-keyframes mover_caja{
	0%{left:90%;}
	50%{left:10%;}
	100%{left:90%;}
}

Los fotogramas clave que hemos establecido en la animación están en el 0% (inicio), el 50% (la mitad) y el 100% (al final). Las propiedades que hemos establecido en estos fotogramas clave son las diferentes posiciones. Nuestro último paso es "enganchar" la animación con el objeto que queramos. Vamos a aplicarlo a "caja1".

.caja1{
	-webkit-animation:mover_caja 5s infinite;
	-moz-animation:mover_caja 5s infinite;
}

Ver ejemplo en funcionamiento » »

En el siguiente ejemplo vamos a realizar una animación rotando una capa y escalándola. El ejemplo completo sería:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS3 Animation 2</title>
<style type="text/css">
#contenido{
	width:700px;
	margin:0 auto;
	padding:50px;
	position:relative;
	background:#FFF;
}
.circulo {
	display:table-cell;
	border-radius: 50px;
	-moz-border-radius: 50px;
	-webkit-border-radius: 50px;
	height:100px;
	width:100px;
	background:#dedede;
	text-align:center;
	vertical-align:middle;
}
.circulo span{
	font-family:Arial, Helvetica, sans-serif;
	font-size:11px;
}

/* Para navegadores webkit */
@-webkit-keyframes rotar
{
0% {-webkit-transform:scale(1) rotate(0deg);}
50% {-webkit-transform:scale(1.5) rotate(180deg);}
100% {-webkit-transform:scale(1) rotate(360deg);}
}

/* Para firefox */
@-moz-keyframes rotar
{
	0% {-moz-transform:scale(1) rotate(0deg);}
	50% {-moz-transform:scale(1.5) rotate(180deg);}
	100% {-moz-transform:scale(1) rotate(360deg);}
}

.circulo
{
	-webkit-animation:rotar 4s infinite;
	-moz-animation:rotar 4s infinite;
}
</style>
</head>
<body>
<div id="contenido">
	<div class="circulo"><span>webintenta</span></div>
</div>
</body>
</html>

Ver ejemplo en funcionamiento » »

El siguiente ejemplo muestra cómo realizar una transición entre colores.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS3 Animation 3</title>
<style type="text/css">
#contenido{
	width:700px;
	margin:0 auto;
	padding:50px;
	position:relative;
	background:#FFF;
}
.circulo {
	display:table-cell;
	border-radius: 50px;
	-moz-border-radius: 50px;
	-webkit-border-radius: 50px;
	height:100px;
	width:100px;
	background:#dedede;
	text-align:center;
	vertical-align:middle;
}

/* Para navegadores webkit */
@-webkit-keyframes cambiar_color
{
0%   {background: red;}
25%  {background: yellow;}
50%  {background: blue;}
100% {background: green;}
}

/* Para firefox */
@-moz-keyframes cambiar_color 
{
0%   {background: red;}
25%  {background: yellow;}
50%  {background: blue;}
100% {background: green;}
}

.circulo
{
	-webkit-animation:cambiar_color 8s linear 1;
	-moz-animation:cambiar_color 8s linear 1;
}
</style>
</head>
<body>
<div id="contenido">
	<div class="circulo"></div>
</div>
</body>
</html>

Ver ejemplo en funcionamiento » »

jQuery: Fade una imagen en otra imagen

, 03/01/2012 09:29:47

La siguiente técnica nos permite realizar una transición entre dos fotos cuando situamos el puntero del ratón sobre una de ellas. Tenemos que realizar una capa con el tamaño exacto de las dos imágenes, poner como fondo de esta capa a una de ellas y dentro de la capa a la otra imagen.

HTML:

<div id="ejemplo_fade">
    	<img src="img/fashion1.jpg" />
</div>

CSS:

#ejemplo_fade{
	background:url("img/fashion2.jpg");
	position:relative;
	width:200px;
	height:200px;
	cursor:pointer;
}

JAVASCRIPT:

$(document).ready(function() {
	
    $("#ejemplo_fade").hover(function(){
        $(this).find("img").fadeOut();
    }, function() {
        $(this).find("img").fadeIn();
    });	

});

El ejemplo completo sería:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fade Imagenes</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
	
$("#ejemplo_fade").hover(function(){
    $(this).find("img").fadeOut();
}, function() {
    $(this).find("img").fadeIn();
});	

});	
</script>
<style type="text/css">
#contenido{
	width:500px;
	margin:auto 0;
	padding:30px;
}
#ejemplo_fade{
	background:url("img/fashion2.jpg");
	position:relative;
	width:200px;
	height:200px;
	cursor:pointer;
}
</style>
</head>
<body>
<div id="contenido">
	<div id="ejemplo_fade">
    	<img src="img/fashion1.jpg" />
    </div>
</div>
</body>
</html>

Ver ejemplo en funcionamiento » »

datalist en HTML5

, 26/12/2011 20:16:57

El tag datalist sirve para especificar una lista de opciones predefinidas para un elemento <input>. Este tag proporciona una característica de autocompletado similar al Google Auto Suggest. El usuario verá una lista desplegable de opciones predefinidas a medida que va introduciendo contenido en la caja de texto. Para unir el elemento input con la lista de elementos del datalist se utiliza en atributo list.

<input list="navegadores" />

<datalist id="navegadores">
  <option value="Internet Explorer">
  <option value="Firefox">
  <option value="Google Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>

Ver ejemplo en funcionamiento » »

El atributo autofocus en HTML5

, 24/12/2011 12:52:25

Autofocus es un atributo booleano para los campos de un formulario que hace que el foco del explorador esté fijado sobre uno de ellos cuando se carga la web. En el siguiente ejemplo puedes ver que el segundo input tiene el atributo autofocus a 1 y, por tanto, verás que el cursor parpadea en el segundo cuadro de texto al cargar la página.

<p><label> Ejemplo 1:</label><input name="nombre" type="text"></p>
<p><label> AutoFocus:</label><input name="nombre" autofocus type="text"></p>

Ver ejemplo en funcionamiento » »

Al igual que en nuestro anterior post, denominado "El atributo placeholder en HTML5", podemos recurrir a Modernizr y jQuery para obtener una versión cross-browser de autofocus:

$(document).ready(function() {
if(!Modernizr.input.autofocus){
	$('input[autofocus]').trigger('focus');
}
});

Ver ejemplo en funcionamiento » »

El atributo placeholder en HTML5

, 23/12/2011 08:56:21

HTML5 ha supuesto bastantes novedades en el desarrollo web. Algunas características ya se están utilizando de forma generalizada y otras muchas poco a poco se irán adoptando a medida que los navegadores las vayan soportando. Una de las nuevas características de HTML5 es el atributo placeholder para los elementos INPUT. El atributo placeholder muestra el texto en un campo hasta que el campo adquiere el foco. En ese momento, se esconde el texto.

<input name="nombre" placeholder="Tu nombre..." type="text">

Una de las ventajas de utilizar el atributo placeholder es que nuestro código será más semántico. El problema es que este atributo no está soportado por todos los navegadores. Por ejemplo, hasta el momento no es soportado por Internet Explorer. Para que sea cross-browser podemos recurrir a Modernizr y jQuery. De Modernizr ya hemos hablado anteriormente en el blog, se usa para comprobar si es el navegador es compatible con determinadas características de HTML5 o CSS3 y si no es compatible, ofrecer una alternativa.

if(!Modernizr.input.placeholder){
	$('[placeholder]').focus(function() {
	  var input = $(this);
	  if (input.val() == input.attr('placeholder')) {
		input.val('');
		input.removeClass('placeholder');
	  }
	}).blur(function() {
	  var input = $(this);
	  if (input.val() == '' || input.val() == input.attr('placeholder')) {
		input.addClass('placeholder');
		input.val(input.attr('placeholder'));
	  }
	}).blur();
	$('[placeholder]').parents('form').submit(function() {
	  $(this).find('[placeholder]').each(function() {
		var input = $(this);
		if (input.val() == input.attr('placeholder')) {
		  input.val('');
		}
	  })
	});
}

El atributo placeholder funciona con los siguientes tipos de input: text, search, url, tel, email, y password.

Ver ejemplo en funcionamiento » »

Valor por defecto en un campo con jQuery

, 20/12/2011 19:46:53

El siguiente snippet nos permite añadir un valor por defecto a un campo de texto y que cuando el usuario se disponga a introducir datos en él, este valor desaparezca. Esta técnica se suele utilizar para dar indicaciones sobre como rellenar el campo dentro del propio campo.

$("#caja").focus(function() {
           if( this.value == this.defaultValue ) {
           this.value = "";
           }
           }).blur(function() {
           if( !this.value.length ) {
           this.value = this.defaultValue;
           }
       });

Un ejemplo podría ser:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Menu Salto jQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$(".caja").focus(function() {
           if( this.value == this.defaultValue ) {
           this.value = "";
           }
           }).blur(function() {
           if( !this.value.length ) {
           this.value = this.defaultValue;
           }
       });
});	
</script>
<style type="text/css">
.caja{
	padding:5px;
	font-size:11px;
	color:#666;
	background:#E8E8E8;
	border:1px solid #CCC;	
}
</style>
</head>
<body>
<p><label> Ejemplo 1:</label><input name="caja" class="caja" width="60" maxlength="200" value="valor por defecto" /></p>
<p><label> Usuario:</label><input name="caja" class="caja" width="60" maxlength="200" value="Al menos 5 caracteres" /></p>
</body>
</html>

Ver ejemplo en funcionamiento » »

Captcha con protección de colores (y 2)

, , 01/03/2011 17:00:06

A petición de algunos lectores, voy a publicar un pequeño ejemplo sobre la aplicación de mi anterior post "Captcha con protección de colores". Tanto el citado post como éste, son ejemplos. Deben ser tomados como puntos de partida y presuponen ciertos conocimientos de programación que se escapan del propósito de ambos posts. Dicho esto, veamos un ejemplo más completo. Necesitamos dos ficheros. El primero es el capcha, la imagen que el usuario deberá reconocer. Podemos nombrar el fichero como captha.php y el código sería el siguiente:

captha.php

<?php
session_start();
header("Content-type: image/png");
$anchura = 146;
$altura = 30;

$im = @imagecreate($anchura, $altura)or die("Cannot Initialize new GD image stream");
imagecolorallocate($im, 255, 250, 255);
$noise_color = imagecolorallocate($im, 207, 239, 250);
for($i=0; $i<($anchura*$altura)/3; $i++) {
	imagefilledellipse($im, mt_rand(0,$anchura), mt_rand(0,$altura), 1, 1, $noise_color);
}
for($i=0; $i<($anchura*$altura)/150; $i++ ) {
 imageline($im, mt_rand(0,$anchura), mt_rand(0,$altura), mt_rand(0,$anchura), mt_rand(0,$altura), $noise_color);
}

$texto_color[0] = imagecolorallocate($im, 255, 0, 0);
$texto_color[1] = imagecolorallocate($im, 51, 166, 207);

$caracteres = 'ABCDEFGHKLMNPRSTUVWYZ23456789';
$longitud = 5;
  function generarCodigo($longitud,$caracteres) {
    $code = '';
    for($i = 1, $cslen = strlen($caracteres); $i <= $longitud; ++$i) {
      $code .= strtoupper( $caracteres{rand(0, $cslen - 1)} );
    }
    return $code;
}
$texto = generarCodigo($longitud,$caracteres);

unset($_SESSION['captcha']);
$_SESSION['captcha']['blue'] = $_SESSION['captcha']['red'] = '';

for($j = 0; $j < mb_strlen($texto); $j++) {
	imagettftext($im, 20, 0, 5+($j*23), 24, $texto_color[$j%2], 'Includes/elephant.ttf', $texto[$j]);
	if(($j%2) == 1) {
		$_SESSION['captcha']['blue'] .= $texto[$j];
	}
	else {
		$_SESSION['captcha']['red'] .= $texto[$j];
	}
}
imagepng($im);
imagedestroy($im);
?>

Ahora necesitamos crear otro fichero (formulario.php) que se encargará de procesar los campos del formulario y comprobar que el captcha ha sido introducido correctamente.

formulario.php

<?php
session_start();
if($_POST['enviar']=="ok") {
	// LIMPIAMOS LO RECOGIDO EN EL FORMULARIO
	$captcha_recogido = filter_var($_POST['valores_captcha'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
	// CONVERTIMOS EN MAYUSCULAS
	$captcha_recogido = strtoupper($captcha_recogido);
	if(empty($captcha_recogido)) {
		echo "<strong>Debes introducir los caracteres en rojo que aparecen en la imagen.</strong>";
	}else{
		if($captcha_recogido==$_SESSION['captcha']['red']) {
			// HA INTRODUCIDO CORRECTAMENTE EL CAPTCHA Y
			// CONTINUAMOS PROCESANDO EL FORMULARIO
			echo "<strong>El formulario ha sido procesado.</strong>";
		}else{
			echo "<strong>Los caracteres introducidos no coinciden con los de la imagen. Inténtalo otra vez.</strong>";
		}
	}
}
?>
<form action="#" method="post" name="form_captha">
<!-- CAMPOS DEL FORMULARIO -->
<p><img src="01032011_captcha.php" alt="captcha" /></p>
<p><label>Teclea los caracteres en rojo</label><input type="text" name="valores_captcha" /></p>
<input name="enviar" type="submit" value="ok" />
<label>
</form>

Ver ejemplo en funcionamiento » »

Páginas: 1 2 3 4 Siguiente >