ホームページ  >  記事  >  ウェブフロントエンド  >  jQuery でスムーズで比例した同期スクロールを実現する方法: Firefox の遅延問題の解決策?

jQuery でスムーズで比例した同期スクロールを実現する方法: Firefox の遅延問題の解決策?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 08:26:02603ブラウズ

How to Achieve Smooth and Proportional Synchronized Scrolling in jQuery: A Solution to the Firefox Lag Issue?

jQuery の同期スクロールのジレンマ: スムーズで比例したスクロールの実現

サイズの異なる要素を扱う場合、同期スクロールの実装は困難になる可能性があります。これに対処するには、スクロールされたコンテンツのパーセンテージを特定し、他の要素に対応するscrollTop値を計算する必要があります。

あなたの場合は、scrollTop / (scrollHeight - offsetHeight)という式を利用できます。これにより、スクロールされた要素の割合を表す 0 ~ 1 の値が得られます。

さらに、Firefox でのスクロールが遅くなるという問題が発生する可能性があります。これは、現在のコードが誤ってスクロール イベントの絶え間ないループを作成してしまうことが原因です。 off() を使用してリスナーのバインドを一時的に解除し、scrollTop を調整してから再バインドすると、この問題を解決できます。

両方の問題に対処する最適化されたコード スニペットを次に示します。

var $divs = $('#div1, #div2');

var sync = function(e){
    var $other = $divs.not(this).off('scroll'), other = $other.get(0);
    var percentage = this.scrollTop / (this.scrollHeight - this.offsetHeight);
    other.scrollTop = percentage * (other.scrollHeight - other.offsetHeight);
    
    // Firefox workaround: Rebinding without delay is insufficient.
    setTimeout( function(){ $other.on('scroll', sync ); },10);
}

$divs.on( 'scroll', sync);

このコードFirefox でのスクロール イベントの無限ループを防止しながら、比例スクロールを保証します。動作するデモを見るには、この jsfiddle にアクセスしてください: http://jsfiddle.net/b75KZ/5/

以上がjQuery でスムーズで比例した同期スクロールを実現する方法: Firefox の遅延問題の解決策?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。