序文
私は JavaScript でプログラミングを始めたばかりで、現在、この趣味の Web サイト プロジェクトに取り組んでいます。このサイトは、左または右に「パン」できる製品画像で満たされたページを表示することになっています。各「ページ」には約 24 枚の中サイズの写真が含まれており、1 ページでほぼ画面いっぱいに表示されます。ユーザーが次のページを見ることを選択した場合、クリックして左にドラッグし (たとえば)、新しいページ (AJAX スクリプトによって動的に読み込まれる) がビューにスライドするようにする必要があります。
問題
これには、私のJavaScriptが、これらの言及されたページのうち2つを同期的に画面の幅で「スライド」する必要があります。これにより、フレームレートが非常に低くなります。Firefox と Opera は少し遅れますが、Chrome は特に悪いです: アニメーションの 1 フレームに約 100 ミリ秒なので、アニメーションが非常に「ラグ」に見えます。
私はjQueryを使用していませんし、jQueryや他のライブラリを使用して「自分のために仕事をする」こともしたくありません。少なくとも、私がやろうとしていることは、数行の自己記述コードでは実行できないことを確実に知るまでは。
これまでのところ、DOM を操作する特定の方法がパフォーマンスの低下を引き起こしていることがわかりました。ルーチンは次のようになります。
function slide() {
this.t = new Date().getTime() - this.msBase;
if( this.t > this.msDura ) {
this.callB.call(this.ref,this.nFrames);
return false;
}
//calculating the displacement of both elements
this.pxProg = this.tRatio * this.t;
this.eA.style.left = ( this.pxBaseA + this.pxProg ) + 'px';
this.eB.style.left = (this.pxBaseB + this.pxProg) + 'px';
if ( bRequestAnimationStatus )
requestAnimationFrame( slide.bind(this) );
else
window.setTimeout( slide.bind(this), 16 );
this.nFrames++;
}
//starting an animation
slide.call({
eA: theMiddlePage,
eB: neighboorPage,
callB: theCallback,
msBase: new Date().getTime(),
msDura: 400,
tRatio: ((0-pxScreenWidth)/400),
nFrames: 0,
ref: myObject,
pxBaseA: theMiddlePage.offsetLeft,
pxBaseB: neighboorPage.offsetLeft
});
質問
AJAX スクリプトが各ページにロードする画像を減らすと、アニメーションがはるかに高速になることに気付きました。別々の画像は、私が予想していたよりも多くのオーバーヘッドを生み出しているようです.
これを行う別の方法はありますか?