
こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。
「カルーセル」と聞くと、多くの方はSlickやSwiperなどのライブラリを思い浮かべるかもしれません。
でも実は、ちょっとしたJSとCSSだけで、軽量でカスタマイズしやすいカルーセルを作ることができるんです。
今回はその中でも「scrollLeftを使ったカルーセルの自作方法」をご紹介します。
jQueryも外部ライブラリも一切不要。
ネイティブJavaScriptでスマートに横スクロールさせましょう!
scrollLeftとは?
scrollLeft は、横方向のスクロール位置を数値で取得・設定できるプロパティです。例えば次のように使います。
carousel.scrollLeft += 300;
このコードは、対象要素のスクロール位置を300px右にずらすという意味になります。
ボタンを押すたびに少しずつスクロールするカルーセルをつくる際に、非常に便利なプロパティです。
See the Pen
Untitled by 小瀧賢 (@ekwwawpb-the-styleful)
on CodePen.
基本構造:HTMLとCSS
HTML構造
<div class="carousel-wrapper">
<button id="prevBtn">◀</button>
<div class="carousel" id="carousel">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
<button id="nextBtn">▶</button>
</div>
CSS(横スクロールスタイル)
.carousel-wrapper {
display: flex;
align-items: center;
gap: 10px;
}
.carousel {
display: flex;
overflow-x: auto;
scroll-behavior: smooth;
width: 300px;
gap: 10px;
}
.item {
min-width: 300px;
height: 200px;
background: #eee;
text-align: center;
line-height: 200px;
font-size: 2rem;
border-radius: 6px;
}
CSSのポイントは overflow-x: auto と scroll-behavior: smooth。
この2つで「横スクロールできるエリア」が完成します。
JavaScriptでscrollLeftを制御
次に、前後のボタンを押したときに scrollLeft を増減してスライドさせます。
const carousel = document.getElementById("carousel");
const prevBtn = document.getElementById("prevBtn");
const nextBtn = document.getElementById("nextBtn");
const scrollAmount = 300; // 1スライド分の横幅
prevBtn.addEventListener("click", () => {
carousel.scrollLeft -= scrollAmount;
});
nextBtn.addEventListener("click", () => {
carousel.scrollLeft += scrollAmount;
});
これだけで、ライブラリ不要のカルーセルが完成します。
横幅やスライド量は必要に応じて調整してください。
応用:スライド終端の制御やレスポンシブ対応
もう少し作り込む場合は、次のような機能を追加できます!
- ボタンを非表示にする(最初・最後のスライド時)
- アイテム数やウィンドウ幅に応じた `scrollAmount` の自動計算
- ドラッグやスワイプ操作の対応(モバイル向け)
例えば、ボタンの無効化
function updateButtons() {
prevBtn.disabled = carousel.scrollLeft === 0;
const maxScroll = carousel.scrollWidth - carousel.clientWidth;
nextBtn.disabled = carousel.scrollLeft >= maxScroll;
}
carousel.addEventListener("scroll", updateButtons);
window.addEventListener("load", updateButtons);
これで「最初・最後ではボタンを押せない」仕様が簡単に実現できます。
まとめ
scrollLeftを使ったカルーセルは、シンプルながら柔軟で、ライブラリ不要の軽量な実装が可能です。
- カスタマイズしやすい
- 外部依存がなくパフォーマンスが良い
- 学習目的にも最適
というメリットがあり、ちょっとしたギャラリーやカード一覧にもぴったりです。
ライブラリに頼る前に、一度「scrollLeft」で自作してみると、JavaScriptやCSSの理解も深まりますよ!













