Ответ 1
Попробуйте:
$(document).ready(function(){
$("#topbar-show").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
});
У меня есть 10px-бар в верхней части экрана, который при щелчке, я хочу, чтобы он анимировал высоту 40 пикселей, а затем, если щелкнуть снова, оживите назад до 10 пикселей. Я попытался изменить идентификатор div, но он не работает. Как я могу заставить это работать, или есть лучший способ сделать это?
body 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');
});
});
Попробуйте:
$(document).ready(function(){
$("#topbar-show").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
});
Вы можете использовать метод toggle-event
(docs) для назначения 2 (или более) обработчиков, которые переключаются с каждым щелчком.
Пример: http://jsfiddle.net/SQHQ2/1/
$("#topbar").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
или вы можете создать свое собственное поведение для переключения:
Пример: http://jsfiddle.net/SQHQ2/
$("#topbar").click((function() {
var i = 0;
return function(){
$(this).animate({height:(++i % 2) ? 40 : 10},200);
}
})());
Для достижения желаемого результата вы должны использовать class
:
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');
}
});
});
Очень поздно, но прошу прощения. Извините, если это "неэффективно", но если вы обнаружили, что все вышеперечисленное не работает, попробуйте это. Работает выше 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>
<!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="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<style type="text/css">
#topbar { width: 100%; height: 10px; background-color: #000; color: #FFF;}
</style>
</head>
<body>
<div id="topbar"> example </div>
<script type="text/javascript">
$(document).ready(function(){
$("#topbar").toggle(function(){
$(this).animate({height:40},200);
},
function(){
$(this).animate({height:10},200);
});
});
</script>
</body>
</html>
Я просто подумал дать вам причину, почему ваше решение не сработало:
Когда $(document).ready()
выполняется, селектор $('#topbar-show')
может найти соответствующий элемент из DOM. Элемент #topbar-show
еще не создан.
Чтобы преодолеть эту проблему, вы можете использовать привязки живых событий
$('#topbar-show').live('click',function(e){});
$('#topbar-hide').live('click',function(e){});
Это самый простой способ исправить ваше решение. Остальные из этих ответов идут дальше, чтобы предоставить вам более эффективные решения, которые не изменяют надежно постоянный атрибут id.
Вы также можете использовать этот трюк: замените
$("#topbar").click(function(){
по
$(document).on("click", "#topbar", function(){
Это привяжет событие к еще не загруженному объекту... ;)
Следующий код работал у меня в jQuery2.1.3
$("#topbar").animate('{height:"toggle"}');
Не нужно вычислять высоту div, отступы, границы и границы. Это позаботится.
Работал для меня:
$(".filter-mobile").click(function() {
if ($("#menuProdutos").height() > 0) {
$("#menuProdutos").animate({
height: 0
}, 200);
} else {
$("#menuProdutos").animate({
height: 500
}, 200);
}
});