Weblasts

OverlayScrollbarsが高性能でスクロールバーをカスタマイズできるという噂を聞いたので触ってみた話

simplebarのgithubを見ていたら色々出てくるデメリットを解決するなら『OverlayScrollbars』を使ったらいいよと紹介されていたので気になって触ってみることにしました。

『OverlayScrollbars』は機能的に優れていてオプションも充実、simplebarで生じたデメリットをうけません

簡易的にですがパフォーマンスを比べてみるとただ使うだけのテストでは大差ないようなのでやりたいことに合わせて選ぶといいかもしれません

パッと見慣れていない人だと使いにくそうな感じでgoogle先生に聞いてみても1ページ目に日本語で紹介している記事が一つしか無いので布教活動のために記事を書き始めました

OverlayScrollbarsの使い方

simplebarと同じようにbody要素に対して使うことを想定して使い方を紹介していきます

とりあえず世界で一番詳しく解説されているのはgithubだと思うので参照しつつ調整してみてください

OverlayScrollbarsで使うための準備

githubの方にDL用のリンクとCDNが用意されています。

今回はCDNを使ってみたいと思うんですが記事を書いている現在最新版のバージョンは2.2.0を使っていきます

CDNのリンクがわかりにくいかもしれないので一応ライブラリを読み込むためのコードを紹介しておきます。

上記コードはhead要素で読み込むように配置してください

更にグローバル変数OverlayScrollbarsGlobalを使用してapiにアクセスできるようにしておきます

プラグインを使う時の書式は以下の通りで、複数の場合は配列にして指定します

OverlayScrollbarsのイニシャライズ

私はbodyの閉じタグ直前にscript要素を作って記述して使っていますがhead要素内でも然るべきコードと組み合わせれば使えると思います

以下のコードでとりあえず動きます

イニシャライズ時のチラツキ防止

OverlayScrollbarsをイニシャライズしようとすると、すべての要素を作成してDOMに追加する仕様のために数ミリ秒の時間が必要になるそうです。

この間、デフォルトのスクロールバーが表示されたままになり、イニシャライズが終了するとデフォルトのスクロールバーから切り替わるのですが、チラつきのような見え方をします

このチラつきはOverlayScrollbarsを使う対象要素(対象要素がbodyの場合はhtml要素)にdata-overlayscrollbars-initialize属性を付与することによって回避できるようですが、公式サイトではbody要素にも付与していたのでここでもそのようなコードで紹介しています。

OverlayScrollbarsのオプション

OverlayScrollbarsは大きく分けると5種類のオプションがあり、optionsメソッドでいつでも変更することができるそうです

まずはオプションの書き方をデフォルト値を使って紹介しておきますのでオプションを使うときの参考にしてください。

paddingAbsolute

type default
boolean false

コンテンツのpaddingを絶対化するか否かを示す。と説明されているオプションです

showNativeOverlaidScrollbars

type default
boolean false

ネイティブのオーバーレイスクロールバーを表示するかどうかを示す。と説明されているオプションです

デフォルトの状態だとiosでスクロールバーが二重に表示されますがtrueにすると一つになります

update.elementEvents

type default
Array<[string, string]> | null [[‘img’, ‘load’]]

タプルの配列です。タプルの最初の値はセレクタで、2番目の値はイベント名です。指定されたセレクタを持つ要素のいずれかが指定されたイベントを発する場合、プラグインはそれ自体を更新します。

デフォルト値の[[‘img’, ‘load’]]はimg要素がloadイベントを発した場合、プラグインはそれ自体を更新すると解釈できる。

update.debounce

type default
[number, number] | number | null [0, 33]

コンテンツの変更を追跡するMutationObserverをデバウンスする。タプルが渡された場合、最初の値はタイムアウト、2番目は最大待機時間です。

update.attributes

type default
string[] | null null

このオプションがNULLの場合でも、MutationObserverが常に観察する属性の基本配列があります。

MutationObserverがコンテンツに対して観察すべき追加属性の配列。

ということなんでDOMの変更を監視する要素を配列で指定する感じだと思われるんですけどまだ実験してないす

update.ignoreMutation

type default
((mutation) => any) | null null

MutationRecordを引数として受け取る関数です。

この関数が真理値を返した場合、変異は無視され、プラグインは更新されない。パフォーマンスを微調整するのに便利です。

overflow.x

type default
string ‘scroll’

X軸のオーバーフロー時の動作を指定するオプションです

使える値はデフォルトのscrollとhidden、visible、visible-hidden、visible-scroll

overflow.y

type default
string ‘scroll’

Y軸のオーバーフロー時の動作を指定するオプションです

使える値はデフォルトのscrollとhidden、visible、visible-hidden、visible-scroll

scrollbars.theme

type default
string | null ‘os-theme-dark’

スクロールバーに付与するclassを指定する。

scrollbars.visibility

type default
string ‘auto’

スクロールバーの基本的な見え方を指定するオプション

使える値はデフォルトのautoとvisible、hidden

scrollbars.autoHide

type default string ‘never’

ユーザーが特定の操作をした後に、表示されているスクロールバーを自動的に非表示にすることができます。

使える値は表示したままにするデフォルトのneverとスクロールしたあとに消えるようにするscroll、表示領域からマウスカーソルが外れたあとに消えるようにするleave、マウス動いていないときに消えるようにするmoveがあります

scrollbars.autoHideDelay

type default
number 1300

スクロールバーが自動的に隠されるまでの遅延時間をミリ秒単位で指定します。

scrollbars.dragScroll

type default
boolean true

スクロールバーのツマミ部分をドラッグしてスクロールさせることができるかどうかを示すオプション

scrollbars.clickScroll

type default
boolean false

スクロールバー・トラックをクリックしてスクロールさせることができるかどうかを示すオプション

このオプションを使用するには、ClickScrollPluginが必要です

scrollbars.pointers

type default
string[] | null [‘mouse’, ‘touch’, ‘pen’]

プラグインが反応すべきPointerTypesを指定する。

ここまでである程度使える形にカスタマイズできます

例えば普段使っているスクロールバーの機能と同じようにするのであれば以下のようなオプションを設定します

OverlayScrollbarsのイベント

すべてのイベントは、それが呼び出されたインスタンスを常に第1引数として受け取る形で書いていきます。

initialized

引数 説明
instance イベントを呼び出したインスタンス

生成されたすべての要素、オブザーバ、イベントがDOMに追加された後に起動されるイベント

updated

引数 説明
instance イベントを呼び出したインスタンス
onUpdatedArgs アップデートの詳細を記述したオブジェクト

インスタンスが更新された後に起動されますが、更新が行われたが何も変化がない場合、イベントは起動されない。

destroyed

引数 説明
instance イベントを呼び出したインスタンス
canceled 初期化がキャンセルされて破棄されたかどうかを示すブール値。

生成されたすべての要素、オブザーバー、イベントが DOM から削除された後に呼び出されます

scroll

引数 説明
instance イベントを呼び出したインスタンス
event DOMイベントの元となるイベント引数

ビューポートをスクロールさせることで呼び出されます

POPULAR