2011-12-23 8 views
8

tengo el siguiente código:jQuery .animate() establece la visualización: ninguno, ¿cómo evitarlo?

HTML:

<div id="clickme"> 
    Click me :-) 
</div> 

<div id="info" style="background:red; width:100%; height:100px; margin-bottom:-100px; z-index:20; position:absolute; bottom:0px;"> 
    Stay, damn! 
</div> 

JavaScript:

$('#clickme').click(function() { 
    $('#info').animate({ 
     marginBottom: 'toggle' 
    },{ 
     duration:500 
    }); 
}); 

También está disponible en http://jsfiddle.net/DxnQJ/

Obviamente, quiero que el #info DIV a aparecer/desaparecer cada vez Se hace clic en #clickme DIV. Funciona según lo previsto, excepto que el #info DIV desaparece después de la animación debido a que jQuery establece su propiedad CSS display en none.

¿Cómo puedo decirle a jQuery que deje de ocultar mi DIV?

+2

Observando la fuente jQuery, parece que 'alternar' fue diseñado para efectos que se muestran u ocultan por completo (como altura, ancho y opacidad). Lo que sucede es que al hacer clic en 'Hacer clic en mí :-)' y animar algo que no está oculto por primera vez tiene el mismo efecto que si tuvieras 'marginBottom: 'hide''. Entonces, cuando termina de animar, se llama a 'jQuery (elem) .hide(); 'en su elemento. – zkhr

Respuesta

2

código javascript

$('#clickme').toggle(
     function() { 
      $('#info').animate({ 
       height:"0px" 
      }, 500); 
     }, 
     function() { 
      $('#info').animate({ 
       height:"100px" 
      }, 500); 
     }); 

http://jsfiddle.net/amkrtchyan/zymUK/2/

0

El cambio de su función de clic con esto funciona:

$('#clickme').click(function() { 
     var whichSetting = $('#info').css('marginBottom'); 
     if(whichSetting == '-100px') { 
      whichSetting = '0px'; 
     } 
     else { 
      whichSetting = '-100px'; 
     } 
     $('#info').animate({ 
      marginBottom: whichSetting 
      },{ 
       duration:500 
     }); 

    }); 
+0

¿Cuál es el voto negativo? Puede que no sea tan elegante como la solución .slideToggle, pero funciona bien. Y lo hace funcionar con marginBottom, que es lo que tenía el póster. – Patches

Cuestiones relacionadas