6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GSAPでサイドバーを固定しながらスクロール追従

Posted at

GSAPのScrollTriggerのピン留め機能を使用したら簡単に実装できました。

デモ

See the Pen GSAPでサイドバーを固定しながらスクロール追従 by miyakezaka (@miyakezaka) on CodePen.

GSAPを使う利点

  • 実装が簡単で動作も安定している
  • スクロールの対象のエリアのみ処理が行われるためブラウザ負荷が少ない
  • IE11にも対応している

その他の方法で実装した場合

GSAPを使用しないでサイドバーを固定する方法だと主に以下が考えられます。

CSSプロパティのposition: sticky;で実装

position: sticky;を紹介した記事をたくさん目にしますが、使用する場面が限られると思いました。

  • サイドバーに要素が多いと実装できない
  • IE11に対応していない(ポリフィル読めば対応できるらしい)

JS処理を組み合わせて実装

こちらは実装と他コンテンツの考慮などとにかく大変でした。

  • ページによってコンテンツの有無で高さが異なるなど、上手く設計してメンテしないと表示崩れが起きやすい。
  • スクロールの対象のエリア外でも常に処理が行われるため負担がブラウザ負荷がかかる

コード解説

JS部分のコードの解説に入ります、GSAPの基本的なところは省きます。
まずはGSAP本体とScrollTriggerの2つを読み込みます。

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js"></script>

ScrollTriggerを設定していきます。
ポイントはendTriggerキーに固定を解除したい要素を指定して、endキーに指定要素のどの位置で解除するかを指定します。
マーカーで位置を確認しながら進めるとやりやすいです、狙った箇所で簡単に固定 〜 解除ができました。

JS

gsap.to('.sidebar', {
  scrollTrigger: {
    trigger: '.sidebar',
    start: 'bottom 100%',
    end: 'bottom 100%',
    endTrigger: 'main',
    pin: true,  
    markers: true
  }
});
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?