ORBIT SLIDER

直線じゃない、自由な形のスライダー

DEMO

See it in action.

<div class="demoSlider1 LilitaOne">
  <svg id="orbitRoad" viewBox="0 0 1440 322" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path class="orbitPath demoSlider1Path"
      d="M-245 47.2055C-66.4579 49.494 828.682 -69.1551 906.271 63.225C954.5 145.511 693.221 131.88 469.168 157.054C248.246 181.876 226 321.5 654.712 321.5C985.34 321.5 1742.97 290.551 1876 282.922"
      stroke="black" />
  </svg>

  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
</div>
.orbit {
  stroke-width: 3;
}

.orbit img {
  transform-origin: 50% 0%;
  width: 100%;
}

.orbit:hover img {
  animation: shake 0.5s infinite;
}

@keyframes shake {
  50% {
    rotate: 2deg;
  }
}

document.querySelectorAll(".orbitSlider").forEach(slider => {
    createorbitSlider(slider, {
        visibleCount: 15,
        orbitItemWidth: "20%",
        sliderHeight: "500px",
        pathTop:"50px",
        dragSpeed: 0.0005,
        autoSpeed: 120,
        pauseOnHover: false,
        direction: "left",
        pathDirection: "normal",
        alignOrigin: {
            x: 0.5,
            y: 0.03,
        },
        autoPlay: true,
        autoMode: "linear",
        autoRotate: false,
        pathFront: true,
        zIndexMode : "front",
        overflowBuffer: 20,
        responsive: {
          700: {
            sliderHeight: "65vw",
          },
        },
    });
});
                        

<div class="demoSlider2">
  <svg class="orbitRoad" viewBox="0 0 2669 933" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path class="orbitPath" d="M0.41394 811.999C362.914 276.999 622.414 664.999 863.914 811.999C1105.41 958.999 1433.41 1028 1657.91 673.999C1882.41 319.999 2271.41 26.4989 2668.41 0.498901" stroke="transparent" />
  </svg>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
  <div class="orbit">
      <img src="画像パス" alt="" />
  </div>
</div>
              

.demoSlider2 img{
  animation: sway 1s infinite;
}
@keyframes sway {
  50%{
    rotate: -5deg;
  }
}
              

document.querySelectorAll(".demoSlider2").forEach((slider) => {
  createorbitSlider(slider, {
    visibleCount: 2.5,
    orbitItemWidth: "250px",
    autoMode: "step",
    stepDuration: 1,
    stepDelay: 0.5,
    draggable: false,
    sliderHeight: "500px",
    pathTop: "50px",
    overflowBuffer: 25,
    responsive: {
      700: {
        sliderHeight: "65vw",
        orbitItemWidth: "35%",
      },
    },
  });
});
            

HOW TO USE

It is easy to use.

このスライダーを動作させるには、ベースとして GSAP (GreenSock Animation Platform)MotionPathPlugin が必要です。

  1. 事前準備(共通)

    HTMLの </body> 直前などで、GSAP本体とプラグインを読み込んでください。

    
    <!-- GSAP 本体 & MotionPathPlugin -->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/MotionPathPlugin.min.js"></script>
            
    <!-- ORBIT SLIDERプラグイン -->
      <script src="https://cdn.jsdelivr.net/gh/molydebnum/orbit-slider@main/dist/orbitSlider.min.js"></script>
  2. ジェネレーター または 手動セットアップ

    • パターン1:ジェネレーターで作成する

      視覚的に調整しながら実装したい場合に最適です。

      1. 1. ベースにしたいSVGパスをコピーして、本ページのジェネレーター内のSVGデータの入力欄に貼り付ける
        ジェネレーターの入力フォーム画面

        ※アイテムを添わせたいパスはSVGタグ内の一番上に置いてください。

      2. 2.プレビューを見ながらSVGデータの入力欄下の設定値を調整し、プレビューの下に書き出された HTML / CSS / JS を各ファイルへ貼り付ける。
    • パターン2:手動でコードを書く

      自由なタイミングで初期化したい場合や、動的に要素を制御したい場合に適しています。

      1. 1. HTML構造を作成する

        svgタグとpathタグ、アイテムのクラス名を合わせて作成してください。

        必須クラス
        • アイテムを添わせる道の親(svgタグ):orbitRoad
        • アイテムを添わせる道(pathタグ):orbitPath
        • アイテム(タグ自由):orbit

        SVGの viewBox やpathの d 属性は作成したものに差し替えます。

        
        <div class="orbitSlider">
          <svg class="orbitRoad" viewBox="0 0 2669 933" xmlns="http://www.w3.org/2000/svg">
            <path class="orbitPath" d="..." />
          </svg>
          
          <div class="orbit">ITEM 1</div>
          <div class="orbit">ITEM 2</div>
          <div class="orbit">ITEM 3</div>
        </div>

        ※アイテムを添わせたいパスはSVGタグ内の一番上に置いてください。

      2. 2. JavaScriptで実行する(最小構成)

        デフォルト設定で良い場合は、これだけの記述で動作します。

        
        document.querySelectorAll(".orbitSlider").forEach((slider) => {
          createorbitSlider(slider);
        });
      3. 3. こだわりたい場合はオプションを追加

        第2引数にオブジェクトを渡すことで、挙動を自由にカスタマイズ可能です。
        オプション一覧

        
        document.querySelectorAll(".orbitSlider").forEach((slider) => {
          createorbitSlider(slider, {
            sliderHeight: "500px",    // 全体の高さ
            visibleCount: 4,          // 画面内の表示数
            autoSpeed: 30,            // 流れる速度
            direction: "right"        // 進行方向
          });
        });
  3. レスポンシブ設定

    responsive オプションを使うことで、画面幅に合わせてスライダーの高さやアイテムのサイズを自動で最適化できます

    
    document.querySelectorAll(".orbitSlider").forEach((slider) => {
      createorbitSlider(slider, {
      // ...基本設定(STEP 2を参照)
        responsive: {
          // 768px以下の時の設定
          768: {
            sliderHeight: "65vw",
            orbitItemWidth: "35%",
            //...全てのオプションがいれられます
          },
          // 480px以下の時の設定
          480: {
            sliderHeight: "80vw",
            orbitItemWidth: "45%",
            //...全てのオプションがいれられます
          }
        }
      })
    });
    • ブレイクポイント: 赤文字の箇所に書いた数字が「画面の横幅(px)」を表しています。画面がその数字よりも小さくなった時に、{}の中の設定が適用されます。
    • 自由な設定: 設定したい画面幅の数だけ、項目を増やすことができます。
    • 自動調整: 画面のサイズを変えるたびにプラグインが自動で計算し直すので、スマホの縦横切り替えにも対応しています。
  4. 🚨うまく表示・動作しない時は?🚨

    • SVGタグの属性を確認

      自作のSVGを使うときは、svgタグの属性として 【xmlns="http://www.w3.org/2000/svg"】 が書かれているか確認してください。これがないと、JavaScriptから正しく認識されません。 もし書かれていない場合は足してみてください。

    • パスの形状

      本プラグインは、始点から終点へ移動する 「オープンパス」専用 です。円や多角形などの閉じられたパス(クローズドパス)では正しく動作しない場合があるため、必ず線が閉じられていないパスを使用してください。

GENERATOR

Design your orbit. Get code.

まずはプラグインを設置!
CDNコード

ここにプレビューが表示されます

<!-- HTML here -->
/* CSS here */
// JS here

OPTIONS

Design your orbit. Get code.

カテゴリ オプション デフォルト 説明
外観・構造 sliderHeight string "400px" スライダー全体の高さ
orbitItemWidth string "200px" 軌道上に並ぶ各アイテムの幅
visibleCount number 3 同時に見えるアイテム数
zIndexMode "front" | "back" | "center" "front" 重なり順のルール
alignOrigin {x:number, y:number} {x:0.5, y:0.5} パス上に乗せる基準点(0.5で中央)
pathTop string "0px" SVGパスの縦位置(スライダーの上からどれくらいの位置にSVGを配置するか)
overflowBuffer number 10 左右にはみ出す余白(%)
pathWidth string | null null SVGの幅(未指定なら自動)
pathFront boolean false パスを前面に表示するか
pathDirection "normal" | "reverse" "normal" パスの進行方向(ものもとのパスの描画方向)
direction "left" | "right" "left" スライドの進行方向
動き・自動再生 autoRotate boolean true 軌道に沿って回転させるか
autoPlay boolean true 自動再生の有無
autoMode "step" | "linear" "linear" 自動再生の方式
autoSpeed number 50 linear時の速度
stepCount number 1 step時に進む個数
stepDuration number 0.6 step時のアニメーション時間
stepDelay number 1.2 次のstepまでの待ち時間
ユーザー操作 pauseOnHover boolean false ホバーで一時停止
draggable boolean true ドラッグ操作を有効にするか
dragSpeed number 0.0015 ドラッグ時の移動感度
レスポンシブ responsive object | null null ブレイクポイント別の設定

ORBIT SLIDERとは?

ちょっと変わったUIをサイトにいれたい方へ
ORBIT SLIDER(オービットスライダー)は、GSAPをベースに開発された、「自由な曲線」の上を要素が動く、一風変わったJavaScriptスライダープラグインです。

このプラグインを使えば、うねうねとした曲線やアーチ型、有機的なカーブのレイアウトなど、他にはない個性的な動きを、SVGパスに沿わせて簡単に実装できます。

  • 自由自在なレイアウト:複雑なカーブも、描いた線がそのままスライダーになります。
  • 専門知識は不要:難しい数学の計算は一切なし。ジェネレーターで直感的に調整可能です。
  • 実用設計:レスポンシブ、ドラッグ操作も標準装備。