次の例のように、アプリで非常に単純なCSS3トランジションを使用しています。ここでは、divコンテナーを左から右にスライドさせようとしています。
<div id="navi">
<form>
<input>...</input>
</form>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</div>
<div id="bg">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
<img src="...">
</div>
#navi{
z-index:2;
position:fixed;
-webkit-transform:translateZ(0);
-webkit-transform-style: preserve-3d;
-webkit-backface-visibility: hidden;
-webkit-transition:left 0.5s;
left:0;
top:0;
bottom:0;
width:95%;
overflow-x:hidden;
overflow-y:auto;
-webkit-overflow-scrolling:touch;
}
.slidein{
left:500px;
}
divをスライドイン/スライドアウトするには、次のようにします。
$("#navi").toggleClass("slidein");
私のiPhone4sでは、この移行は非常にスムーズです。iPhone4ではパフォーマンスはひどいです。
パフォーマンスを向上させるためにできることはありますか?「ゴールデンルール」またはベストプラクティスはありますか?
これまでのところ、私は知っているだけです:
-webkit-transform:translateZ(0)
ハードウェアアクセラレーションをトリガーするために使用します- 使用する
-webkit-transform-style: preserve-3d;
- 使用する
-webkit-backface-visibility: hidden;
- グラデーションを避ける
- 避ける
box-shadow
私の主な問題の1つは、多くの要素を持つの#navi
ように、内部に非常に多くのアイテムがあることです。その下には、かなり大きな画像を含む別のdiv要素もあります。これらもパフォーマンスを低下させるようです(少なくとも、これらを使用するとパフォーマンスが向上しますが、スライドの移行中に表示する必要があるため、これはオプションではありません)。<ul>
<li>
#navi
display:none