Efectos especiales con jQuery, hacer desaparecer y aparecer objetos
Un efecto que me había gustado bastante era el que hacían algunas listas con ajax que cuando eliminaban un item lo hacían caer mientras se desvanecía en la caída, al igual que, al contrario, si cargaban un nuevo item parecía caer desde la parte de arriba de la web materializándose en la parte de arriba de una lista. Continuando con la lectura de jQuery que estoy haciendo esta semana he visto que es realmente fácil hacer este efecto ya que solo hay que mezclar un par de efectos de aplicación y fadeOn/fadeOut para hacer que un div o un objeto cualquiera aparezca. Os dejo como siempre el ejemplo diseccionado.
Codigo que carga la librería jQuery y las funciones aparecer() y desaparecer():
-
<script src="http://gsgd.co.uk/sandbox/jquery/jquery-1.2.1.js" type="text/javascript"></script>
-
<script type="text/javascript">
-
function desaparecer(objeto, caida){
-
$(objeto).animate({
-
opacity: 0.0,
-
marginTop: caida,
-
}, 500 ).hide("slow");
-
}
-
-
function aparecer(objeto, caida){
-
$(objeto)
-
.animate({
-
opacity: '0.0',
-
marginTop: "-"+caida,
-
}, 10 ).show()
-
.animate({
-
opacity: '1.0',
-
marginTop: "0",
-
}, 1000 );
-
}
-
</script>
Un pequeño CSS de ejemplo que da las opciones al div que vamos a hacer aparecer y desaparecer y de paso centra la web entera para que no fallen los porcentajes:
-
html, body {
-
height:100%
-
width:100%;
-
margin:0px;
-
padding:0px;
-
}
-
#mensaje {
-
width:20%;
-
}
El codigo continente en el body, ejecutamos las funciones con 2 parametros. El primero es el id del objeto en cuenstion, en nuestro caso #mensaje y el segundo será la distancia a la que caerá o la distancia desde la que caerá. Si introducimos un numero simplemente se tomara como distancia en px, pero se pueden introducir también porcentajes:
Ejemplo completo:
-
<!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">
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>ejemplo desaparecer/aparecer</title>
-
<style type="text/css">
-
html, body {
-
height:100%
-
width:100%;
-
margin:0px;
-
padding:0px;
-
}
-
#mensaje {
-
width:20%;
-
}
-
</style>
-
<script src="http://gsgd.co.uk/sandbox/jquery/jquery-1.2.1.js" type="text/javascript"></script>
-
<script type="text/javascript">
-
function desaparecer(objeto, caida){
-
$(objeto).animate({
-
opacity: 0.0,
-
marginTop: caida,
-
}, 500 ).hide("slow");
-
}
-
-
function aparecer(objeto, caida){
-
$(objeto)
-
.animate({
-
opacity: '0.0',
-
marginTop: "-"+caida,
-
}, 10 ).show()
-
.animate({
-
opacity: '1.0',
-
marginTop: "0",
-
}, 1000 );
-
}
-
</script>
-
</head>
-
<div VALIGN="top" id="mensaje">
-
<img src="http://www.tierra0.com/wp-content/themes/satori/images/encabezado.gif" style="width:100px; height:30px;">
-
</div>
-
</body>
-
</html>
Se ve bien en firefox 2 pero en explorer 7 no funciona… una lastima… porque es un buen efecto que se podria utilizar de maneras distintas.
hola @emulation, no tenia ni idea.. cuando lo hice no tenia ni el IE7 instalado.. supongo que será cuestión de cambiar la versión del archivo de jQuery.. y si no por los valores de opacidad… ahora estoy trabajando en otros proyectos y no puedo echarle un ojo pero en cuanto pueda lo miro. Gracias por el aviso..
Muy Bueno Antares se agradece tu aporte ya estaba buscando un sitio como este y la explicacion muy buena xD
Buenas a todos
estoy utilizando la funciona animate esta y tampoco me funciona en IE7 y solo estoy trabajando con el estilo ‘top’:
$(”#base”).animate({ top: pAct+’px’}, 250 , function() {moviment=false;});
si alguien encuentra una solucion rapida y sencilla se lo agradeceria ya que estoy programando de zero una animate() para IE7 i es un coñazo!
Hola Jordi, pues la verdad es que no lo sabia.. no tengo IE7 instalado y todavía no he podido comprobarlo pero hay algunas cosas que suelen causar errores en los IE con jQuery..
la mas usual es no pre-declarar las variables a usar.. ya sabes.. hay que aplicar un 100% al body de alto y ancho, un 0 de margen… esas cosas… de esa manera preestableces un valor referencial para el resto de declaraciones.. quizá tu problema esté por esa parte..
Tengo esta funcion que me funciona perfectamente en FIREFOX, pero el animate no se ejecuta con IE7:
var top=81;//desplacament
var moviment=false;//controlem si estem en moviment
function mouFIRE(mov){
if(!moviment){
moviment=true;
t_mov=mov;
/*obtenim la pos actual*/
var pAct=$(”#base”).css(’top’);
var mida=pAct.length;
var pAct=Number(pAct.substr(0,mida-2));
/*obtenim la altura de la galeria*/
var max=$(”#base”).css(’height’);
var mida=max.length;
max=Number(max.substr(0,mida-2));
/*decidim si pujar o baixar*/
if(mov==0){
if(pAct+top=(pAct*(-1)+top)){pAct=pAct-top;}//pujar
}
/*bloquejem els botons*/
if(pAct==0){
$(’#menys’).attr(’src’,'imatges/menysNeg.jpg’);
}else{
$(’#menys’).attr(’src’,'imatges/menys.jpg’);
}
if((max-405)<=((pAct)*(-1))){
$(’#mes’).attr(’src’,'imatges/mesNeg.jpg’);
}else{
$(’#mes’).attr(’src’,'imatges/mes.jpg’);
}
/*ens movem*/
$(”#base”).animate({ top: pAct+’px’}, 250 , function() {moviment=false;});
}
}
<?
$n=15;
$foto=1;
for ($i=1;$i
<div style=”border:1px solid #414141;float:;padding:2px;margin-bottom:5px;”>
<img id=”foto” src=”imatges/exemples/ex.jpg” width=”70px” height=”70px” onclick=”mirar()”>