9

下向きではなく上向きにアニメートするトグルを作成する必要があります。つまり、「通常の」トグルの逆です。おそらくもっと簡単なのは、通常のslideToggleなどのように下にスライドするのではなく、メニュー項目(メニュー)の上にトグルを上にスライドして表示する必要があることです。私はこれでほぼそこにいます:

var opened = false;
$("#coltab li").click(function(){
    if(opened){
        $(this).children('ul').animate({"top": "+=300px"});
    } else {
        $(this).children('ul').animate({"top": "-=300px"});
    }
    $(this).children('ul').children().slideToggle('slow');
    $(this).children('ul').toggle();
    opened = opened ? false : true;
});

ただし、アイテムを「トグル」すると、別のアイテムが300px下がり、2番目のアイテム(下にスライド)が300px下がり、300px上にスライド(上がり)しません。私が達成したいことの良い例(サイトが嫌い)は、http://market.weogeo.com/#/homeと下部の「タブ」です。

私のHTMLコードは使用しています

<ul id="#coltab">
<li>Item 1
<ul>
<li>This bit needs to toggle up</li>
</ul>
</li>
<li>Item 2
<ul>
<li>This bit needs to toggle up</li>
</ul>
</li>
etc ...
</ul>

CSS側

ul#coltab { position: relative' blah; blah; }

ul#coltab  ul { display: none; position: absolute; blah; blah; }

何か案は?

「クリックされた」トグルを開く前に、各「クリック」が前のトグルを閉じたと便利です。

4

4 に答える 4

3

これを試してください:

$("#coltab li ul").each(function (index) {
  $(this).data('height', $(this).outerHeight());    
});

$("#coltab li").click(function () {

    $("#coltab li ul.open").animate({"top": 0}, function () {
        $(this).removeClass('open');  
    });

    var itemHeight = $(this).children('ul').data('height');
    $(this).find('ul:not(.open)').animate({"top": -itemHeight}).addClass('open');

});

そして、新しいcssクラスを追加します。

#coltab ul.open { display: block; }

ここでテストしてください

于 2011-01-01T16:06:41.930 に答える
3

フィラーの代わりにリストに実際のCSSを提供した場合は、より具体的な回答を提供できます。

基本的に、のbottomプロパティをul#coltab ulに設定する必要があります0

一般的な例:http: //jsfiddle.net/s7AD8/

ul#coltab  ul {
    position:absolute;
    bottom:0;
    /*...and so on*/
}

これにより、上方向にアニメーション化されます。

于 2011-01-01T15:36:46.403 に答える
1

「-=300px」は、事前に計算された変数の方が良いと思います。(文字列で計算を処理することもできますか?)

さらに、それらを個別に操作したい場合は、処理したいパーツのIDを提供することで、はるかに簡単な時間になると思います。

于 2011-01-01T15:31:49.703 に答える
1

ulとliを他の何かのために解放する必要がある場合は、別の方法を使用することもできます。

<style>
body { margin: 100px 50px; }

#coltab { position: relative; text-align: center; }

#coltab > li {
    background: #ccc;
    color: #444;
    cursor: pointer;
    display: block;
    float: left;
    margin: 0 10px;
    padding: 10px 20px;
    position: relative;
    width: 100px;
}

#coltab span {
    background: #eee;
    color: #222;
    display: none;
    padding: 5px;
    position: absolute;
    left: 0;
    right; 0;
    top: 0;
    z-index: -1;
}

#coltab span.open { display: block; }

</style>

<head>

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js"> </script>

</head>

<body>



<div id="coltab">
    <li>Item 1<br/>(click me)
            <span>This first item needs to toggle up</span>
    </li>
    <li>Item 2<br/>(click me)
            <span>This second item needs to toggle up</span>
    </li>
</div>

<script>
$(document).ready(function() {
$("#coltab li span").each(function (index) {
  $(this).data('height', $(this).outerHeight());    
});

$("#coltab li").click(function () {

    $("#coltab li span.open").animate({"top": 0}, function () {
        $(this).removeClass('open');  
    });

    var itemHeight = $(this).children('span').data('height');
    $(this).find('span:not(.open)').animate({"top": -itemHeight}).addClass('open');

});
});
</script>
</body>
于 2011-03-03T23:54:55.820 に答える