JQuery slideToggleエフェクトが必要ですが、iOSデバイスでGPUを呼び出すためにCSS3トランジションを使用して、トランジションをよりスムーズにしたいと思います。
これは、height
、padding
およびborder-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>
申し訳ありませんが、正確な高さがわからない限り、CSS3ではサポートされていません。 0とautoの間でアニメーション化する方法はありません。正確な高さがわかっている場合は、ここでいくつかの遷移コードを生成できます。 http://css3generator.com/
確かに、0と自動高さの間でアニメーション化することはできませんが、実際には最大高さを切り替えることができます。
(JS経由で)max-height:0
およびmax-height:1000px
そして、jQueryのslideToggle関数ほど滑らかではありませんが、達成された結果が得られます。
不透明度のフェードと組み合わせると、見栄えがよくなります。大きいコンテナはぎくしゃくしたアニメーションを作成する可能性があるため、このテクニックは比較的短いコンテナでのみ使用することを強くお勧めします。
.container {
overflow-y: hidden;
max-height: 0;
transition: max-height 0.5s ease;
}
.container.open {
max-height: 1000px; /* approx */
}
私は Animatable がトリックをするべきだと信じています。これはCSS Transitionsフレームワークであり、私はiOS開発をしていませんが、Lea VerouはFFおよびChrome for iOSでテストしていると述べています。
move.js など、CSSトランジションとJavaScriptを使用する他のCSSアニメーションライブラリがあります。