画面の上部に10pxのバーがあり、クリックすると40pxの高さまでアニメーション化し、再度クリックすると10pxに戻るようにアニメーション化します。 divのidを変更しようとしましたが、機能していません。これをどのように機能させることができますか、それを行うためのより良い方法がありますか?
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
(ドキュメント) クリックごとにトグルする2つ(またはそれ以上)のハンドラーを割り当てるメソッド。
例:http://jsfiddle.net/SQHQ2/1/
$("#topbar").toggle(function(){
$(this).animate({height:40},200);
},function(){
$(this).animate({height:10},200);
});
または、独自のトグル動作を作成できます。
$("#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>
ソリューションが機能しなかった理由を説明したいと思います。
$(document).ready()
が実行されると、$('#topbar-show')
セレクターのみがDOMから一致する要素を見つけることができます。 #topbar-show
要素はまだ作成されていません。
この問題を乗り越えるために、ライブイベントバインディングを使用できます
$('#topbar-show').live('click',function(e){});
$('#topbar-hide').live('click',function(e){});
これは、ソリューションを修正する最も簡単な方法です。これらの回答の残りの部分は、永続的なid属性を変更しない代わりに、より良いソリューションを提供するためにさらに進みます。
このトリックを使用することもできます:replace
$("#topbar").click(function(){
沿って
$(document).on("click", "#topbar", function(){
これは、まだロードされていないオブジェクトのイベントをバインドします...;)
以下のコードは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);
}
});