画像をスライドするスライダーを作る方法
画像を横方向へスライドして切り替えるスライダーを作る方法を紹介します。このサンプルでは、1枚の大きな画像を表示し、画像の下に配置した左右の操作ボタンをクリックすると前後の画像へスライドします。最後の画像から次へ進むと1枚目へ戻り、1枚目から前へ戻ると最後の画像へ移動するループ式のため、途中で操作を止めることなく繰り返し画像を切り替えられます。
Webサイトのメインビジュアル、写真ギャラリー、商品画像、作品紹介など、限られた表示領域で複数の画像を1枚ずつ見せたい場面に利用できます。画像の下には前へ戻るボタン、現在位置を表すドット、次へ進むボタンを横一列に配置します。左右のボタンにはSVGアイコンを使用し、ドットをクリックすると対応する画像へ直接切り替えられるため、前後への移動と画像の直接選択をどちらも行えます。
HTMLでは画像、左右の操作ボタン、SVGアイコン、ドットを配置し、CSSでは画像の大きさや角丸、スライドアニメーション、操作部分の配置、ボタンやドットのデザインを設定します。JavaScriptでは現在表示している画像番号を管理し、左右のボタンによるループ処理とドットによる画像切り替えを行います。画面幅640px以下では画像や操作部分が画面幅に合わせて表示されるため、スマートフォン・タブレット・PCで利用できる画像スライダーとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
画像の下にある左右のSVGアイコンをクリックすると、画像が1枚ずつ横方向へスライドします。最後の画像から次へ進むと1枚目へ戻り、1枚目から前へ戻ると最後の画像へ移動します。中央のドットから表示する画像を直接選ぶこともできます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>画像をスライドするスライダー</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- スライダー本体 -->
<div class="image-slide-slider_slider">
<!-- 画像表示エリア -->
<div class="image-slide-slider_view">
<!-- 横方向へ移動する画像トラック -->
<div class="image-slide-slider_track">
<!-- 1枚目の画像 -->
<div class="image-slide-slider_slide">
<img src="images/image1.png" alt="1枚目の画像">
</div>
<!-- 2枚目の画像 -->
<div class="image-slide-slider_slide">
<img src="images/image2.png" alt="2枚目の画像">
</div>
<!-- 3枚目の画像 -->
<div class="image-slide-slider_slide">
<img src="images/image3.png" alt="3枚目の画像">
</div>
</div>
</div>
<!-- 操作部分 -->
<div class="image-slide-slider_controls">
<!-- 前の画像へ移動するボタン -->
<button class="image-slide-slider_button image-slide-slider_prev" type="button" aria-label="前の画像">
<!-- 左向きSVGアイコン -->
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M15 18l-6-6 6-6"></path>
</svg>
</button>
<!-- 現在位置を選択するドット -->
<div class="image-slide-slider_dots">
<button class="image-slide-slider_dot is-active" type="button" aria-label="1枚目の画像を表示">
</button>
<button class="image-slide-slider_dot" type="button" aria-label="2枚目の画像を表示">
</button>
<button class="image-slide-slider_dot" type="button" aria-label="3枚目の画像を表示">
</button>
</div>
<!-- 次の画像へ移動するボタン -->
<button class="image-slide-slider_button image-slide-slider_next" type="button" aria-label="次の画像">
<!-- 右向きSVGアイコン -->
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M9 6l6 6-6 6"></path>
</svg>
</button>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは3枚の画像と、画像の下に前へ戻るボタン・3つのドット・次へ進むボタンを配置します。左右のボタンにはSVGアイコンを直接記述しているため、矢印用の画像ファイルや外部アイコンライブラリは必要ありません。CSSでは画像の表示サイズや角丸、操作部分の配置、ボタン、SVGアイコン、ドット、スライドアニメーションを設定し、JavaScriptでは画像の切り替えと前後のループ動作を行います。スライダーで使用する3枚のPNG画像はZIPへ含まれていないため、利用者自身で用意してimagesフォルダへ配置してください。
sample/
├── index.html
├── style.css
├── script.js
└── images/
├── image1.png
├── image2.png
└── image3.png
各ファイルの役割
index.htmlはスライダー本体を構成するファイルです。3枚の画像、前後へ移動する操作ボタン、SVGで作成した左右の矢印アイコン、表示する画像を直接選択する3つのドットを記述しています。画像にはimages/image1.png、images/image2.png、images/image3.pngを指定しています。
style.cssはスライダーのレイアウトとデザインを設定するファイルです。画像の表示サイズや角丸、横方向へ移動するときのアニメーション、画像の下に配置する操作部分、左右の青いボタン、SVGアイコン、ドットの大きさや色を変更できます。
script.jsはスライダーの動作を設定するファイルです。現在表示している画像番号を管理し、前後のボタンをクリックすると画像を1枚ずつ切り替えます。最後の画像から次へ進むと1枚目へ戻り、1枚目から前へ戻ると最後の画像へ移動します。ドットをクリックすると、対応する画像を直接表示します。
imagesフォルダにはスライダーで使用するimage1.png、image2.png、image3.pngを配置します。imagesフォルダと画像ファイルはZIPには含まれていないため、利用者自身で用意してください。
設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置し、同じsampleフォルダ内へimagesフォルダを作成します。使用する3枚のPNG画像を用意して、image1.png、image2.png、image3.pngというファイル名でsample/images/へ配置してください。別のファイル名や画像形式を使用する場合は、index.htmlの各img要素にあるsrcも実際のファイル名とパスに合わせて変更します。
必要なファイルと画像を配置したあと、sample/index.htmlをブラウザで開いてください。画像の下にある左側のSVGボタンをクリックすると前の画像、右側のSVGボタンをクリックすると次の画像へスライドします。最後の画像から次へ進むと1枚目へ戻り、1枚目から前へ戻ると最後の画像へ移動します。中央のドットをクリックすると、対応する画像へ直接切り替えられます。
カスタマイズできる内容
index.htmlでは表示する画像と代替テキストを変更できます。各img要素のsrcを画像の配置先に合わせて変更し、altも画像の内容に合わせて書き換えてください。画像を追加する場合はimage-slide-slider_slideを追加し、対応するimage-slide-slider_dotも同じ数になるよう追加します。左右の操作ボタン内にあるSVGのpathを変更すると、矢印アイコンの形も変更できます。
style.cssではスライダーの最大横幅、画像の高さや角丸、スライド速度、画像と操作部分の間隔、左右ボタンの大きさや色、SVGアイコンの大きさや線幅、ドットの大きさや色などを変更できます。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。上下40px・左右20pxを設定しています。値を大きくすると画面端との間隔が広がり、小さくすると狭くなります。
max-width:696px;
スライダー本体の最大横幅です。値を大きくすると画像を含むスライダー全体が横に広がり、小さくするとコンパクトになります。
border-radius:18px;
画像表示エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
transition:transform .3s ease;
画像が横方向へ移動する時間です。.3sは0.3秒を表します。値を大きくするとゆっくり移動し、小さくすると速く移動します。
flex:0 0 100%;
画像1枚の横幅です。100%にすることで、表示エリアへ画像を1枚ずつ表示します。
height:360px;
PC表示での画像の高さです。値を大きくすると画像が高くなり、小さくすると低くなります。
gap:18px;
前ボタン・ドット・次ボタンの間隔です。値を大きくすると操作要素同士の間隔が広がり、小さくすると狭くなります。
margin-top:20px;
画像と操作部分の間隔です。値を大きくすると操作部分が画像から下へ離れ、小さくすると近くなります。
width:52px;・height:52px;
左右の操作ボタンの大きさです。値を大きくするとボタンが大きくなり、小さくすると小さくなります。
transition:background-color .3s ease;
操作ボタンやドットの色が切り替わる時間です。.3sは0.3秒を表し、値を大きくするとゆっくり、小さくすると速く変化します。
width:24px;・height:24px;
操作ボタン内に表示するSVGアイコンの大きさです。値を大きくすると矢印が大きくなり、小さくすると小さくなります。
stroke-width:2;
SVGアイコンの線幅です。値を大きくすると矢印の線が太くなり、小さくすると細くなります。
gap:10px;
ドット同士の間隔です。値を大きくするとドット同士が離れ、小さくすると近くなります。
width:12px;・height:12px;
ドットの大きさです。値を大きくするとドットが大きくなり、小さくすると小さくなります。
@media(max-width:640px)
スマートフォン向けの表示へ切り替える画面幅です。640px以下になると画像や操作部分のサイズを変更します。
height:220px;
画面幅640px以下での画像の高さです。値を大きくするとスマートフォンでも画像が高く表示されます。
gap:14px;
画面幅640px以下での前ボタン・ドット・次ボタンの間隔です。
margin-top:18px;
画面幅640px以下での画像と操作部分の間隔です。
width:44px;・height:44px;
画面幅640px以下での左右の操作ボタンの大きさです。
width:22px;・height:22px;
画面幅640px以下でのSVGアイコンの大きさです。
width:10px;・height:10px;
画面幅640px以下でのドットの大きさです。
script.js
let imageSlideSliderIndex=0;
最初に表示する画像番号です。0は1枚目を表します。1へ変更すると2枚目、2へ変更すると3枚目から表示できます。
imageSlideSliderIndex*100
画像の横方向への移動量を求める計算です。100は画像1枚分の横幅を表し、現在の画像番号に100%を掛けて表示位置を決めます。
imageSlideSliderIndex--・imageSlideSliderIndex++
左右のボタンを1回クリックしたときに画像番号を1つ戻す、または1つ進める処理です。現在は1回の操作で画像1枚分切り替わります。
imageSlideSliderSlides.length-1
1枚目から前へ戻ったときに最後の画像番号を求める処理です。画像の総数から1を引くことで最後の画像へ移動します。
imageSlideSliderIndex=0;
最後の画像から次へ進んだときに1枚目へ戻す値です。これにより前後の操作を繰り返せるループ式になります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではスライダー本体へwidth:100%とmax-width:696pxを設定し、画像にもwidth:100%を指定しているため、設置する場所や画面幅に合わせて横幅が縮小されます。
画面幅640px以下では@media(max-width:640px)を使用し、ページの余白を24px 12px、画像の高さを220px、操作ボタンを44px、SVGアイコンを22px、ドットを10pxへ変更します。画像の下に前ボタン・ドット・次ボタンを並べる基本構成は維持したまま、スマートフォン・タブレット・PCで利用できます。
コメント