Библиотека jQuery - анимация переключения высоты
у меня есть панель 10px в верхней части экрана, которая при нажатии я хочу, чтобы она анимировалась на высоту 40px, а затем, если снова щелкнуть, анимировать обратно до 10px. Я попытался изменить идентификатор div, но он не работает. Как я могу заставить это работать, или есть лучший способ сделать это?
тело 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');
});
});
9 ответов
попробуйте:
$(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>
вы также можете использовать этот трюк: заменить
$("#topbar").click(function(){
by
$(document).on("click", "#topbar", function(){
это свяжет событие с еще не загруженным объектом... ;)
Я просто думал, чтобы дать вам причину, почему ваше решение не работает:
, когда $(document).ready()
выполняется только $('#topbar-show')
селектор может найти соответствующий элемент из DOM. The #topbar-show
элемент еще не создан.
чтобы преодолеть эту проблему, вы можете использовать привязки live event
$('#topbar-show').live('click',function(e){});
$('#topbar-hide').live('click',function(e){});
Это самый простой способ исправить решение. Остальные из этих ответов идут дальше, чтобы предоставить вам лучшие решения, а не изменять надеюсь, постоянный атрибут id.
приведенный ниже код работал для меня в jQuery2.1.3
$("#topbar").animate('{height:"toggle"}');
Не нужно вычислять высоту div,заполнение,поля и границы. Все будет хорошо.
Это было бы возможно:
$(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>
работала на меня:
$(".filter-mobile").click(function() {
if ($("#menuProdutos").height() > 0) {
$("#menuProdutos").animate({
height: 0
}, 200);
} else {
$("#menuProdutos").animate({
height: 500
}, 200);
}
});