web-dev-qa-db-ja.com

JQuery-高さを切り替えるアニメーション

画面の上部に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');
  });
});
38

これを試してみてください:

$(document).ready(function(){
  $("#topbar-show").toggle(function(){
    $(this).animate({height:40},200);
  },function(){
    $(this).animate({height:10},200);
  });
});
55

toggle-event(ドキュメント) クリックごとにトグルする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);
    }
})());
17
user113716

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');
      }
    });
  });
16
Nathan Anderson

非常に遅くなりましたが、謝罪します。これが「非効率的」な場合は申し訳ありませんが、上記のすべてが機能しない場合は、これを試してください。上記の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>
3
user2756339

ソリューションが機能しなかった理由を説明したいと思います。

$(document).ready()が実行されると、$('#topbar-show')セレクターのみがDOMから一致する要素を見つけることができます。 #topbar-show要素はまだ作成されていません。

この問題を乗り越えるために、ライブイベントバインディングを使用できます

$('#topbar-show').live('click',function(e){});
$('#topbar-hide').live('click',function(e){});

これは、ソリューションを修正する最も簡単な方法です。これらの回答の残りの部分は、永続的なid属性を変更しない代わりに、より良いソリューションを提供するためにさらに進みます。

1
Aleksi Yrttiaho

このトリックを使用することもできます:replace

$("#topbar").click(function(){

沿って

$(document).on("click", "#topbar", function(){

これは、まだロードされていないオブジェクトのイベントをバインドします...;)

1
Bronco

以下のコードはjQuery2.1.3で私のために働いた

$("#topbar").animate('{height:"toggle"}');

Divの高さ、パディング、マージン、境界線を計算する必要はありません。お世話になります。

1
Mahesh B

それは可能性です:

$(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>
1
AlfaTeK

私のために働いた:

$(".filter-mobile").click(function() {
   if ($("#menuProdutos").height() > 0) {
      $("#menuProdutos").animate({
         height: 0
      }, 200);
   } else {
      $("#menuProdutos").animate({
         height: 500
      }, 200);
   }
});
0
Elliot