jQueryプラグむンずしおのJavaScriptスクロヌルバヌラッパヌ

この問題を解決するために蚭蚈された膚倧な数のスクリプトにもかかわらず、ブラりザヌのスクロヌルバヌのスタむル蚭定の問題は䟝然ずしお関連しおいたす。 ブラりザのネむティブ動䜜に可胜な限り近い様匏化されたスクロヌルバヌの実装を怜蚎しおください。



HTML / CSSを䜿甚しおスクロヌルバヌをスタむリングするには、䞻に2぀のアプロヌチがあり、それぞれに長所ず短所がありたす。







JavaScript゚ミュレヌションスクロヌル



このアプロヌチの倧きな利点は、完党にJavaScript゜リュヌションであるこずです。 このおかげで、この゜リュヌションは開発が容易であり、最倧限にクロスブラりザヌですブラりザヌスクロヌルの特定の実装に関係なく、すべおのブラりザヌでスクロヌルの動䜜が同じになるずいう意味で。HTML構造ず適甚されたCSSスタむルぞの圱響は最小限です。 同様のアプロヌチは、jScrollPane、FleXcroll、Tiny Scrollbar、その他倚くの䌁業で䜿甚されおいたす。



ただし、このアプロヌチの長所は、同時にその匱点でもありたす。







ネむティブスクロヌルのJavaScriptラッパヌ



このアプロヌチは、本来の目的であるコンテンツのスクロヌルを続けながら、ネむティブスクロヌルがHTML / CSSによっお隠されるこずです。 このような解決策は、いずれにしおもネむティブスクロヌルが゚ミュレヌトされたスクロヌルよりも優れおいるずいう理由で奜たしいです。 倚くはこのアプロヌチに基づいおプラグむンを䜜成しようずしたしたが、暙準がないため、クロスブラりザの実装は非垞に耇雑であり、䜿甚されるHTML構造ずCSSスタむルに特定の制限を課したす。 このため、倚くの開発者は、垂盎スクロヌルのみの実装を䜜成したす。これは、すべおのブラりザヌで予枬どおりに動䜜したす。



このアプロヌチの優れた実装の1぀は、最近、蚘事「 システムのスクロヌルバヌのクロスブラりザヌカスタマむズ」で説明されおいたす。



䞉茪車の発明


次のバむクを䜜成した理由の1぀は、スクロヌルを様匏化するスクリプトの怜玢で、20を超えるさたざたなプラグむンが衚瀺され、そのいずれも泚文したプロゞェクトに適しおいないずいう事実でした。 よく知られおいるプラ​​グむンのほずんどは、ペヌゞ䞊で倚数の初期化されたスクロヌルを䌎う遅い操䜜のために適合したせんでした。 他の実装は、実装が䞍䟿だったり、ブラりザ間の互換性が䞍十分だったために適合したせんでした。



次の芁件を満たす独自の実装を行うこずが決定されたした。







アプロヌチずしお、ネむティブスクロヌル䞊にJavaScriptラッパヌの圢匏でプラグむンを䜜成する゜リュヌションが遞択されたした。 ネむティブスクロヌルの機胜を終了し、CSSを䜿甚しおネむティブスクロヌルを非衚瀺にし、定型化されたスクロヌルを衚瀺したす。 これにより、暙準スクロヌルの動䜜を゚ミュレヌトする必芁がなく、JavaScriptを䜿甚しお䜍眮の倉曎のみをキャッチできるずいう利点がありたす。



それでも、スクロヌルの完党な゚ミュレヌションを回避するこずはできたせんでした-マりスが定型化されたスクロヌル䞊にあるずきのスクロヌル動䜜を゚ミュレヌトする必芁がありたすマりススクロヌルをキャッチするには、ドラッグアンドドロップ、スクロヌル自䜓ず矢印をクリックしたす。 もちろん、「Connected and Forgot」ずいう理想的な゜リュヌションは機胜したせんでした。 しかし、蚭定された目暙のほがすべおが完党に達成されたした。



デモンストレヌション


゜ヌスファむル


䞀般的なスクロヌルバヌの機胜の比范




ご泚意



定型化されたスクロヌルバヌを機胜させるには、特定のHTML構造が必芁であり、初期化時に元のJavaScriptコンテナヌが別のコンテナヌにラップされるこずに泚意しおください。 このため、いく぀かの䜿甚パタヌン、HTML構造、およびCSSスタむルがありたす。



  1. ゜ヌスコンテナにむンラむンスタむルを含めるこずはできたせん
  2. コンテナにパディング/マヌゞンを䜿甚しないでください。 むンデントが必芁な堎合は、内郚に必芁なむンデントを持぀別のコンテナを远加するこずをお勧めしたす
  3. コンテナの内容を倉曎するずきは、クラスごずにコンテナにアクセスしないでください。 これらのクラスはラッパヌコンテナによっお䜿甚されたす




マむナヌな欠陥には、マりスがコンテナの内容の䞊にある堎合ネむティブ動䜜ずマりスがスクロヌルバヌの䞊にある堎合゚ミュレヌトされたスクロヌルのマりスホむヌルでのスクロヌルの高さ/幅の違いが含たれたす。 実装するのが非垞に難しいいく぀かのアむデアがあるので、私はそれらを「埌で」残したす。



たた、WebKit ChromeおよびSafariブラりザヌでテキストを遞択するずきに、コンテナヌをスクロヌルする䞍快な効果を取り陀くこずはできたせん。 郚分的には、倖郚スクロヌルデモで利甚可胜を䜿甚するずきにこれを行うこずができたした。



泚釈



異なるブラりザヌだけでなく、同じブラりザヌの異なるバヌゞョンはい、そのブラりザヌでのスクロヌル動䜜の違いのため、同様の動䜜を蚈算するためにマヌゞン/パディング/境界線/䜍眮の倚くの組み合わせを詊す必芁がありたした。 ゜リュヌションの怜玢䞭に、いく぀かの興味深い機胜がありたした。







バヌゞョン0.1.320130425ぞの曎新







バヌゞョン0.1.420130430ぞの曎新







バヌゞョン0.1.620131018ぞの曎新







バヌゞョン0.1.720140307ぞの曎新







バヌゞョン0.1.820140308ぞの曎新







バヌゞョン0.1.920140310ぞの曎新







バヌゞョン0.2.020140312ぞの曎新







バヌゞョン0.2.120140323ぞの曎新







バヌゞョン0.2.220140411ぞの曎新







バヌゞョン0.2.320140703ぞの曎新







バヌゞョン0.2.420140715ぞの曎新






All Articles