J'ai un grand panneau de navigation principal que je souhaite animer lors de son déploiement (extension).
Je travaille avec jQuery pour déclencher sa visibilité en ajoutant/supprimant la classe visible/cachée.
J'ai dû définir un délai pour appliquer la classe masquée, car le déclencheur est un bouton situé en dehors du div du panneau. (Si j'ai utilisé un survol sur le bouton, une fois que vous avez déroulé le panneau, celui-ci disparaîtra)
Le code est ceci
$(document).ready(function() {
$('#menu-item-9').click(function(){
$('#repair-drop').removeClass('hidden');
$('#repair-drop').addClass('visible');
});
$('#repair-drop').on('mouseleave', function(e) {
setTimeout(function() {
$('#repair-drop').removeClass('visible').addClass('hidden');
}, 600);
});
});
Mon CSS est comme suit
.hidden{
max-height: 0px;
-webkit-transition: max-height 0.8s;
-moz-transition: max-height 0.8s;
transition: max-height 0.8s;
}
.visible{
max-height: 500px;
}
L'effet de transition ne fonctionne pas du tout.
Vous ajoutez et supprimez la classe qui contient la CSS de transition. Je recommande de déplacer cela à sa propre règle DEMO .
.hidden{
max-height: 0px;
}
.visible{
max-height: 500px;
}
#repair-drop{
-webkit-transition: max-height 0.8s;
-moz-transition: max-height 0.8s;
transition: max-height 0.8s;
}
Je suis fatigué de ce problème, mieux utiliser l'animation:
.container .element.animation {
animation: SHW .5s;
animation-fill-mode: both
}
@keyframes SHW {
from {
transform:scale(0.7);
opacity:0
}
to {
transform: scale(1);
opacity:1
}
}
Ajouter uniquement à la classe .element .animation et son fonctionnement:
$('.container .element').addClass('animation');
Ne supprimez pas la classe .hidden
; il contient vos styles transition
. Ajoutez et supprimez simplement la classe .visible
.
$(document).ready(function() {
$('#menu-item-9').on('click', function(e) {
$('#repair-drop').addClass('visible');
});
$('#repair-drop').on('mouseleave', function(e) {
setTimeout(function() {
$('#repair-drop').removeClass('visible');
}, 600);
});
});
http://jsfiddle.net/mblase75/LjhNa/
Cela dit, vous devrez peut-être améliorer votre solution pour que les utilisateurs puissent rapidement passer de #repair-drop
à la souris et cliquer sur #menu-item-9
avant de pouvoir la masquer.
$(document).ready(function() {
$('#menu-item-9').on('click', function(e) {
$('#repair-drop').data('shown',true).addClass('visible');
});
$('#repair-drop').on('mouseleave', function(e) {
$('#repair-drop').data('shown',false);
setTimeout(function() {
if (!$('#repair-drop').data('shown')) {
$('#repair-drop').removeClass('visible');
}
}, 600);
});
});
Avez-vous envisagé d'utiliser les fonctionnalités d'animation de jQuery UI? tel que
jQuery('#menu-item-9').hide({duration:200,effect:'blind'});
Vous pouvez également animer la suppression de la classe, comme
jQuery('#menu-item-9').removeClass('hidden', {duration:200,effect:'blind'});
J'ai trouvé un moyen de faire en sorte que cela fonctionne avec le plugin JQery Easing. Merci à tous pour vos réponses
$(document).ready(function() {
$('#menu-item-9').click(function(){
$('#repair-drop').removeClass('hide');
$('#repair-drop').animate({"max-height":"500px", "padding-top":"20px", "opacity":"1"},1500, "easeOutCubic");
});
$('#repair-drop').on('mouseleave', function(e) {
setTimeout(function() {
$('#repair-drop').animate({"max-height":"0px", "overflow":"hidden", "padding":"0px","opacity":"0"},2000, "easeOutCubic");
}, 600);
});
});