2012-01-14 9 views
16

jQueryのslideToggleエフェクトが必要ですが、iOSデバイスでGPUを呼び出すためにCSS3のトランジションを使用して、トランジションがスムーズになるようにします。CSS 3トランジションを使用してjQueryのslideToggleと同じ効果を得る方法は?

+0

私はiOS開発者をテストしていませんが、move.jsまたはanimatableはどうでしょうか?トグルではなく、要素がどの位置にあるかについてのif/elseステートメントがあります。 –

答えて

15

これは、height,paddingborder-widthに移行することで実現できます。次に例を示します。

$('.run-css').click(function() { 
 
    $('.cont').toggleClass('toggled'); 
 
});
.cont { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px #CCC solid; 
 
    background-color: #EEE; 
 
    padding: 5px; 
 
    -webkit-transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear; 
 
    transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear; 
 
} 
 
.toggled { 
 
    overflow: hidden; 
 
    padding-top: 0; 
 
    padding-bottom: 0; 
 
    height: 0; 
 
    border-width: 0 1px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<button class="run-css">CSS slideToggle</button> 
 

 
<div class="cont">Toggle this div</div>

+0

ありがとうございます。これは私のために働くように見えます。 – sevens

+1

これは純粋なcssではありません –

+8

はいです。純粋なCSSとは、エフェクト自体がJavaScriptを必要としないことを意味します。私はデモの目的のためにJSを使用して、効果をトリガーするクラスを切り替えました。 – dfsq

0

私はAnimatableがすべきことを信じています。これはCSSトランジションのフレームワークですが、iOS開発はしませんが、Lea VerouはFFやChrome for iOSでテストしています。

CSSトランジションとJavaScriptを使用する​​のような、他のCSSアニメーションライブラリがあります。

+0

応答に感謝します。 – sevens

12

申し訳ありませんが、あなたは正確な高さを知っている限り、これはCSS3でサポートされていません。 0とautoの間でアニメーション化する方法はありません。正確な高さを知っていれば、ここでいくつかのトランジションコードを生成することができます:http://css3generator.com/

+0

それは私が 'height'を言及せずに解決策を探し続けることです。 – Muhammed

4

True、実際には最大高さを切り替えることができます。

最大高さ:0と最大高さ:1000pxの間で(JS経由で)切り替え、結果が得られますが、jQueryのslideToggle関数ほど滑らかではありません。

不透明度が弱くなっていて、かなり良く見えます。大きなものではぎこちないアニメーションを作成できるので、比較的短いコンテナでこのテクニックを使用することを強くお勧めします。

+1

面白いです。私はこれと一緒に遊んだし、それはぎくしゃくするコンテナのサイズではありません...それは '最大高さ'と実際のコンテンツの高さの違いです。そのため、コンテンツの高さを知る必要があるかもしれません。もしあなたがぎこちない経験をしないようにしたいのであれば(コンテンツの高さを知っていれば、単に「高さ」を越えることができます)。 – bryanbraun

3
.container { 
    overflow-y: hidden; 
    max-height: 0; 

    transition: max-height 0.5s ease; 
} 
.container.open { 
    max-height: 1000px; /* approx */ 
} 
関連する問題