Scrollspy
スクロール位置に基づいてBootstrapのナビゲーションまたはリストグループコンポーネントを自動的に更新し、ビューポートで現在アクティブなリンクを示します。
仕組み
Scrollspyが正しく機能するためにはいくつかの要件があります。
- JavaScriptをソースからビルドしている場合は、
util.js
が必要です。 - Bootstrapのナビゲーションコンポーネントまたはリストグループで使用する必要があります。
- Scrollspyでは、監視対象の要素(通常は
<body>
)にposition: relative;
が必要です。 <body>
以外の要素を監視する場合は、height
を設定し、overflow-y: scroll;
を適用してください。- アンカー(
<a>
)は必須で、そのid
を持つ要素を指す必要があります。
正しく実装されると、ナビゲーションまたはリストグループはそれに応じて更新され、関連するターゲットに基づいて.active
クラスが1つの項目から次の項目に移動します。
ナビバーの例
ナビバーの下の領域をスクロールして、アクティブなクラスの変化を確認してください。ドロップダウン項目もハイライトされます。
@fat
Scrollspyの例のプレースホルダーコンテンツです。あなたは最高の建築物を持っています。パスポートスタンプ、彼女はコスモポリタンです。上品で、新鮮で、猛烈で、ロックオンしました。いつかあなたを失うことになるとは思っていませんでした。彼女はあなたの心を食い尽くします。あなたのキスは宇宙的で、あらゆる動きが魔法です。私が言いたいのは、彼女こそがそうだってことです。愛する皆さん、旅に出ましょう。まるで7月4日のように夜を独り占めにしてください!しかし、あなたはむしろ無駄に過ごしたいのでしょう。
@mdo
Scrollspyの例のプレースホルダーコンテンツです。なぜなら彼女はミューズでありアーティストだからです。(これが私たちのやり方)だから魔法と戯れたいのでしょう。だから、すべてを私に捧げる前に、よく確かめてください。私は歩いている、私は空気の上を歩いている(今夜)。おしゃべりはやめて、全部聞いた、行動で示すときが来た。
1
Scrollspyの例のプレースホルダーコンテンツです。彼女が持つ国際的な笑顔で、あなたを何マイルも高く、高く連れて行きます。私のベッドに見知らぬ人がいて、頭がガンガンしています。ああ、だめだ。別の人生では、私はあなたを引き留めるでしょう。なぜなら私は、私は何でもできるからです。戴冠式の戦いのために着飾ります。昔は両親のお酒を盗んで屋根に登っていた。引き締まった、日焼けした、準備万端、盛り上がれ、激しくなるから。彼女の愛は麻薬のようなものです。私は選択肢があったことを忘れていたのでしょう。
2
Scrollspyの例のプレースホルダーコンテンツです。大きな風船を出す時が来ました。私は歩いている、私は空気の上を歩いている(今夜)。ああ、私たちはクレジットカードを使い果たしてバーを追い出された。おい、飲み放題のサービスを受けて、家賃のお金を払っているガキどもに敬意を表する。私はあなたの心を私の体にピッタリフィットしたジーンズの中でドキドキさせるでしょう。もしチャンスがあれば、彼女をキープした方がいい。おい、飲み放題のサービスを受けて、家賃のお金を払っているガキどもに敬意を表する。
3
Scrollspyの例のプレースホルダーコンテンツです。もしあなたが踊りたいなら、すべてが欲しいなら、私があなたに電話するべき女の子だと知っているでしょう。嵐の中を歩いていくでしょう。だからあなたの誕生日用の服を着させてください。逃した人。先週の金曜日の夜、ええ、私たちは法律を破ったと思う、いつもやめようと言うのに。なぜなら彼女は少しヨーコであり、少し「ああ、だめだ」だから。私はアゴを落とさせ、目を飛び出させ、頭を回転させ、体をショックさせたい。ああ、私たちはクレジットカードを使い果たしてバーを追い出された。
そして、念のために、さらにプレースホルダーコンテンツを追加します。
<nav id="navbar-example2" class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link" href="#fat">@fat</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#mdo">@mdo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#one">one</a>
<a class="dropdown-item" href="#two">two</a>
<div role="separator" class="dropdown-divider"></div>
<a class="dropdown-item" href="#three">three</a>
</div>
</li>
</ul>
</nav>
<div data-spy="scroll" data-target="#navbar-example2" data-offset="0">
<h4 id="fat">@fat</h4>
<p>...</p>
<h4 id="mdo">@mdo</h4>
<p>...</p>
<h4 id="one">one</h4>
<p>...</p>
<h4 id="two">two</h4>
<p>...</p>
<h4 id="three">three</h4>
<p>...</p>
</div>
ネストされたナビゲーションの例
Scrollspyは、ネストされた.nav
にも対応しています。ネストされた.nav
が.active
の場合、その親も.active
になります。ナビバーの隣の領域をスクロールして、アクティブなクラスの変化を確認してください。
項目 1
Scrollspyの例のプレースホルダーコンテンツです。これは項目1に関連しています。彼女が持つ国際的な笑顔で、あなたを何マイルも高く、高く連れて行きます。私のベッドに見知らぬ人がいて、頭がガンガンしています。ああ、だめだ。別の人生では、私はあなたを引き留めるでしょう。なぜなら私は、私は何でもできるからです。戴冠式の戦いのために着飾ります。昔は両親のお酒を盗んで屋根に登っていた。引き締まった、日焼けした、準備万端、盛り上がれ、激しくなるから。彼女の愛は麻薬のようなものです。私は選択肢があったことを忘れていたのでしょう。
項目 1-1
Scrollspyの例のプレースホルダーコンテンツです。これは項目1-1に関連しています。あなたは最高の建築物を持っています。パスポートスタンプ、彼女はコスモポリタンです。上品で、新鮮で、猛烈で、ロックオンしました。いつかあなたを失うことになるとは思っていませんでした。彼女はあなたの心を食い尽くします。あなたのキスは宇宙的で、あらゆる動きが魔法です。私が言いたいのは、彼女こそがそうだってことです。愛する皆さん、旅に出ましょう。まるで7月4日のように夜を独り占めにしてください!しかし、あなたはむしろ無駄に過ごしたいのでしょう。
項目 1-2
Scrollspyの例のプレースホルダーコンテンツです。これは項目1-2に関連しています。彼女の愛は麻薬のようなものです。私のガールフレンドはみんなヴィンテージシャネルのベイビーです。モーテルに泊まってシーツで砦を建てました。なぜなら彼女はミューズでありアーティストだからです。(これが私たちのやり方)だから魔法と戯れたいのでしょう。だから、すべてを私に捧げる前に、よく確かめてください。私は歩いている、私は空気の上を歩いている(今夜)。おしゃべりはやめて、全部聞いた、行動で示すときが来た。彼女を捕まえることができれば。ハチのように刺して私は自分のストライプを獲得した。
項目 2
Scrollspyの例のプレースホルダーコンテンツです。これは項目2に関連しています。謝罪は必要ありません。今は恐れはない、手放して自由に過ごすだけ、私はあなたを無条件に愛します。先週の金曜日の夜。恥ずかしがり屋はやめて、きっと美しいよ。高校卒業後の夏、私たちが初めて出会ったとき。なぜなら彼女はミューズでありアーティストだからです。え?ちょっと待って。いや、いや、いや、いや。私が例外だと思っていた。
項目 3
Scrollspyの例のプレースホルダーコンテンツです。これは項目3に関連しています。噂によると、あなたは何か私に見せるものを持っている、私に。このお金ではタイムマシンを買うことはできません。毎日あなたの誕生日みたいにしてください。それで私たちは大通りに出ます。あなたが私をそうさせるやり方で、私はまるでティーンエイジャーの夢を生きているように感じます。おしゃべりはやめて、全部聞いた、行動で示すときが来た。噂によると、あなたは何か私に見せるものを持っている、私に。たいしたことじゃない、たいしたことじゃない、たいしたことじゃない。
項目 3-1
Scrollspyの例のプレースホルダーコンテンツです。これは項目3-1に関連しています。ねぇ、あなたこれをやってみる?これはたいしたことじゃない。ええ、彼女の飛行機に乗れたらラッキーだよ。まるで7月4日のように夜を独り占めにしてください!爆弾が落ち始めたら最前線に立つ。だから、すべてを私に捧げる前に、よく確かめてください。
項目 3-2
Scrollspyの例のプレースホルダーコンテンツです。これは項目3-2に関連しています。あなたはオリジナルで、置き換えることはできません。一晩中、彼らはあなたの歌を流している。カリフォルニアガールズ、私たちは否定できない。鳥かごのない鳥のように。今は恐れはない、手放して自由に過ごすだけ、私はあなたを無条件に愛します。私は壁に書かれている文字が見える。あなたは世界中を旅することができますが、黄金の海岸に匹敵するものはありません。
<nav id="navbar-example3" class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link" href="#item-1">Item 1</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ml-3 my-1" href="#item-1-1">Item 1-1</a>
<a class="nav-link ml-3 my-1" href="#item-1-2">Item 1-2</a>
</nav>
<a class="nav-link" href="#item-2">Item 2</a>
<a class="nav-link" href="#item-3">Item 3</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ml-3 my-1" href="#item-3-1">Item 3-1</a>
<a class="nav-link ml-3 my-1" href="#item-3-2">Item 3-2</a>
</nav>
</nav>
</nav>
<div data-spy="scroll" data-target="#navbar-example3" data-offset="0">
<h4 id="item-1">Item 1</h4>
<p>...</p>
<h5 id="item-1-1">Item 1-1</h5>
<p>...</p>
<h5 id="item-1-2">Item 1-2</h5>
<p>...</p>
<h4 id="item-2">Item 2</h4>
<p>...</p>
<h4 id="item-3">Item 3</h4>
<p>...</p>
<h5 id="item-3-1">Item 3-1</h5>
<p>...</p>
<h5 id="item-3-2">Item 3-2</h5>
<p>...</p>
</div>
リストグループの例
Scrollspyは、.list-group
にも対応しています。リストグループの隣の領域をスクロールして、アクティブなクラスの変化を確認してください。
項目 1
Scrollspyリストグループの例のプレースホルダーコンテンツです。これは項目1に関連しています。謝罪は必要ありません。今は恐れはない、手放して自由に過ごすだけ、私はあなたを無条件に愛します。先週の金曜日の夜。恥ずかしがり屋はやめて、きっと美しいよ。高校卒業後の夏、私たちが初めて出会ったとき。なぜなら彼女はミューズでありアーティストだからです。え?ちょっと待って。私が例外だと思っていた。
項目 2
Scrollspyリストグループの例のプレースホルダーコンテンツです。これは項目2に関連しています。ええ、彼女は自分のリズムで踊る。ああ、だめだ。あなたは最高になれたはずだった。だって、ベイビー、あなたは花火なんだから。たぶん、すべてのドアが閉まっている理由。心を開いて、始めさせてください。とてもシックで、ええ、彼女はクラシックです。
項目 3
Scrollspyリストグループの例のプレースホルダーコンテンツです。これは項目3に関連しています。私たちはどんどん高くなっていく。いつも一緒に、私たちは約束を交わした。私は空を歩いている。誰かがあなたのタトゥーを消したと言った。今、私は蝶のようにふわふわと浮かんでいる。引き締まった、日焼けした、準備万端、盛り上がれ、激しくなるから。だって一度あなたのものになったら、一度あなたのものになったら。光に火をつけて輝かせるしかない!それで私たちは大通りに出ます。あなたはこれまで感じたことがありますか、とても紙のように薄く感じます。私にはすべてが見える、今見える。
項目 4
Scrollspyリストグループの例のプレースホルダーコンテンツです。これは項目4に関連しています。高校卒業後の夏、私たちが初めて出会ったとき。今は恐れはない、手放して自由に過ごすだけ、私はあなたを無条件に愛します。太陽にキスされた肌はとても熱く、アイスキャンディーを溶かしてしまいそうです。この愛はあなたを浮揚させるでしょう。
<div id="list-example" class="list-group">
<a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
<a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
<a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
<a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
</div>
<div data-spy="scroll" data-target="#list-example" data-offset="0" class="scrollspy-example">
<h4 id="list-item-1">Item 1</h4>
<p>...</p>
<h4 id="list-item-2">Item 2</h4>
<p>...</p>
<h4 id="list-item-3">Item 3</h4>
<p>...</p>
<h4 id="list-item-4">Item 4</h4>
<p>...</p>
</div>
使い方
データ属性による
トップバーナビゲーションにscrollspyの動作を簡単に追加するには、監視対象の要素(通常は<body>
)にdata-spy="scroll"
を追加します。次に、Bootstrapの.nav
コンポーネントの親要素のIDまたはクラスをdata-target
属性で追加します。
body {
position: relative;
}
<body data-spy="scroll" data-target="#navbar-example">
...
<div id="navbar-example">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
JavaScriptによる
CSSでposition: relative;
を追加したら、JavaScriptでscrollspyを呼び出します
$('body').scrollspy({ target: '#navbar-example' })
解決可能なIDターゲットが必要
ナビバーのリンクには、解決可能なidターゲットが必要です。たとえば、<a href="#home">ホーム</a>
は、DOM内の<div id="home"></div>
のようなものに対応する必要があります。
非表示:visible
のターゲット要素は無視される
jQueryによると:visible
でないターゲット要素は無視され、対応するナビゲーション項目がハイライトされることはありません。
メソッド
.scrollspy('refresh')
DOMの要素を追加または削除する際にScrollspyを使用する場合、次のようにrefreshメソッドを呼び出す必要があります。
$('[data-spy="scroll"]').each(function () {
var $spy = $(this).scrollspy('refresh')
})
.scrollspy('dispose')
要素のScrollspyを破棄します。
オプション
オプションは、データ属性またはJavaScriptを介して渡すことができます。データ属性の場合、オプション名をdata-
に追加します。例えば、data-offset=""
のようにします。
名前 | 型 | デフォルト | 説明 |
---|---|---|---|
offset | number | 10 | スクロール位置を計算する際に、上端からのオフセットピクセル数。 |
method | string | auto | 監視対象の要素がどのセクションにあるかを検索します。auto はスクロール座標を取得する最適な方法を選択します。offset はjQueryのoffsetメソッドを使用してスクロール座標を取得します。position はjQueryのpositionメソッドを使用してスクロール座標を取得します。 |
target | string | jQueryオブジェクト | DOM要素 | Scrollspyプラグインを適用する要素を指定します。 |
イベント
イベントタイプ | 説明 |
---|---|
activate.bs.scrollspy | Scrollspyによって新しい項目がアクティブ化されるたびに、このイベントがスクロール要素で発生します。 |
$('[data-spy="scroll"]').on('activate.bs.scrollspy', function () {
// do something...
})