J'ai une barre de 10 pixels en haut de l'écran qui, lorsque vous cliquez dessus, je souhaite l'animer à une hauteur de 40 pixels, puis si vous cliquez à nouveau, revenez à l'animation jusqu'à 10 pixels. J'ai essayé de changer l'identifiant de la div, mais ça ne marche pas. Comment pourrais-je obtenir que cela fonctionne, ou y a-t-il une meilleure façon de le faire?
corps html:
<div id="topbar-show"></div>
css:
#topbar-show { width: 100%; height: 10px; background-color: #000; }
#topbar-hide { width: 100%; height: 40px; background-color: #000; }
javascript:
$(document).ready(function(){
$("#topbar-show").click(function(){
$(this).animate({height:40},200).attr('id', 'topbar-hide');
});
$("#topbar-hide").click(function(){
$(this).animate({height:10},200).attr('id', 'topbar-show');
});
});
Essayez ceci:
$(document).ready(function(){
$("#topbar-show").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
});
Vous pouvez utiliser le toggle-event
(docs) méthode pour assigner 2 (ou plus) gestionnaires qui basculent avec chaque clic.
Exemple:http://jsfiddle.net/SQHQ2/1/
$("#topbar").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
ou vous pouvez créer votre propre comportement de bascule:
Exemple:http://jsfiddle.net/SQHQ2/
$("#topbar").click((function() {
var i = 0;
return function(){
$(this).animate({height:(++i % 2) ? 40 : 10},200);
}
})());
Vous devriez utiliser une class
pour obtenir ce que vous voulez:
css:
#topbar { width: 100%; height: 40px; background-color: #000; }
#topbar.hide { height: 10px; }
javascript:
$(document).ready(function(){
$("#topbar").click(function(){
if($(this).hasClass('hide')) {
$(this).animate({height:40},200).removeClass('hide');
} else {
$(this).animate({height:10},200).addClass('hide');
}
});
});
Très tard mais je m'excuse. Désolé si cela est "inefficace" mais si vous trouvez que tout ce qui précède ne fonctionne pas, essayez ceci. Fonctionne aussi au dessus de 1.10
<script>
$(document).ready(function() {
var position='expanded';
$("#topbar").click(function() {
if (position=='expanded') {
$(this).animate({height:'200px'});
position='collapsed';
} else {
$(this).animate({height:'400px'});
position='expanded';
}
});
});
</script>
J'ai juste pensé à vous expliquer pourquoi votre solution n'a pas fonctionné:
Lorsque $(document).ready()
est exécuté, seul le sélecteur $('#topbar-show')
peut trouver un élément correspondant dans le DOM. L'élément #topbar-show
n'a pas encore été créé.
Pour résoudre ce problème, vous pouvez utiliser des liaisons d'événements en direct.
$('#topbar-show').live('click',function(e){});
$('#topbar-hide').live('click',function(e){});
C'est le moyen le plus simple de résoudre votre problème. La suite de ces réponses va plus loin pour vous fournir une meilleure solution à la place qui ne modifie pas l'attribut, espérons-le, permanent.
Vous pouvez également utiliser cette astuce: Replace
$("#topbar").click(function(){
par
$(document).on("click", "#topbar", function(){
Cela liera un événement sur un objet pas encore chargé.
Le code ci-dessous a fonctionné pour moi dans jQuery2.1.3
$("#topbar").animate('{height:"toggle"}');
Vous n'avez pas besoin de calculer votre hauteur, rembourrage, marge et bordures. Ça va prendre soin.
Ce serait une possibilité:
$(document).ready(function(){
$("#topbar").toggle(function(){
$(this).animate({height:40},200);
},
function(){
$(this).animate({height:10},200);
});
});
#topbar {
width: 100%;
height: 10px;
background-color: #000;
color: #FFF;
cursor: pointer;
}
<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
</head>
<body>
<div id="topbar"> example </div>
</body>
</html>
A travaillé pour moi:
$(".filter-mobile").click(function() {
if ($("#menuProdutos").height() > 0) {
$("#menuProdutos").animate({
height: 0
}, 200);
} else {
$("#menuProdutos").animate({
height: 500
}, 200);
}
});