画像を切り替えるトグルスイッチを作る方法
画像を切り替えるトグルスイッチを作る方法を紹介します。このサンプルでは、トグルスイッチのON・OFF状態に応じて表示する画像を切り替えます。JavaScriptで状態を判定し、2枚の画像を切り替えるシンプルな構成なので、初心者でも仕組みを理解しやすく、そのまま実際のWebサイトへ導入できます。
商品画像の切り替え、テーマ画像の変更、イラストの比較表示、ビフォー・アフター画像の表示など、さまざまな場面で利用できます。トグルスイッチを操作するだけで画像が切り替わるため、ボタンを複数配置する必要がなく、直感的な操作が可能です。お問い合わせページや紹介ページ、ECサイトの商品説明などでも活用できます。
HTMLでは画像や説明文を変更でき、CSSでは画像サイズや余白、角丸、影などを自由に調整できます。JavaScriptでは切り替える画像の指定を変更できるため、用途に合わせて簡単にカスタマイズできます。レスポンシブにも対応しているため、スマートフォン・タブレット・PCでも見やすく利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
トグルスイッチを切り替えると表示画像が変わります。
トグルスイッチをON・OFFに切り替えると、「山と湖」と「海と青空」の画像が切り替わります。
コードをコピーして使おう!
<!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="toggle-switch-image_wrap">
<!-- タイトル -->
<div class="toggle-switch-image_title">
画像切り替え
</div>
<!-- 説明文 -->
<p class="toggle-switch-image_text">
トグルスイッチを切り替えると表示画像が変わります。
</p>
<!-- トグルスイッチの設定項目 -->
<div class="toggle-switch-image_row">
<!-- 項目名 -->
<span class="toggle-switch-image_label-text">
画像を切り替える
</span>
<!-- トグルスイッチ -->
<label class="toggle-switch-image_switch">
<!-- ON・OFF状態を管理するチェックボックス -->
<input
id="image-toggle"
class="toggle-switch-image_checkbox"
type="checkbox"
aria-label="表示画像を切り替える">
<!-- スイッチの背景と丸いノブ -->
<span class="toggle-switch-image_slider"></span>
</label>
</div>
<!-- 切り替える画像 -->
<img
id="switch-image"
class="toggle-switch-image_image"
src="https://picsum.photos/id/1015/800/450"
alt="山と湖のサンプル画像">
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではトグルスイッチと切り替え対象の画像を配置し、CSSではスイッチの見た目や画像サイズ、余白、角丸などを設定します。JavaScriptではトグルスイッチのON・OFF状態を取得し、状態に合わせて表示する画像URLと代替テキストを切り替えます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは画像切り替え全体を構成するファイルです。「画像切り替え」のタイトル、説明文、「画像を切り替える」の項目名、トグルスイッチ、表示画像を配置しています。表示する画像にはid="switch-image"を指定し、JavaScriptから画像を切り替えられるようにしています。
style.cssはトグルスイッチと画像のデザインを設定するファイルです。全体の横幅や余白、背景色、スイッチの横幅・高さ・色、ノブの大きさや移動量、画像の横幅、比率、角丸、影などを変更できます。
script.jsはトグルスイッチの状態に合わせて画像を切り替えるファイルです。changeイベントでON・OFFを判定し、ONの場合はimageOnUrl、OFFの場合はimageOffUrlで指定した画像へ変更します。同時に画像のaltも表示内容に合わせて変更します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。初期状態ではトグルスイッチがOFFになっており、imageOffUrlで指定した画像が表示されます。
トグルスイッチをONにすると、表示画像がimageOnUrlで指定した画像へ切り替わります。もう一度OFFにすると、最初の画像へ戻ります。このサンプルでは外部の画像URLを直接指定しているため、imagesフォルダへ画像を配置する必要はありません。
カスタマイズできる内容
index.htmlでは「画像切り替え」のタイトル、「トグルスイッチを切り替えると表示画像が変わります。」の説明文、「画像を切り替える」の項目名を変更できます。また、初期表示画像を変更する場合はsrcとaltを変更します。
script.jsではimageOffUrlとimageOnUrlを書き換えることで、OFF時とON時に表示する画像を変更できます。画像に合わせて、"犬のサンプル画像"と"山と湖のサンプル画像"の代替テキストも変更してください。
style.cssでは全体の最大横幅、余白、背景色、トグルスイッチのサイズ、OFF・ON時の背景色、ノブのサイズ、画像の最大横幅、縦横比、角丸、影などを変更できます。
数値調整
style.css
max-width:720px;
画像切り替え全体の最大横幅です。値を大きくすると全体が横へ広がり、小さくするとコンパクトになります。
margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
全体を囲むエリアの角丸です。値を大きくすると丸みが強くなります。
font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。
margin:0 0 28px;
説明文の下側余白です。28pxを大きくするとトグルスイッチとの間隔が広がります。
gap:20px;
項目名とトグルスイッチの間隔です。値を大きくすると間隔が広がります。
width:88px;・height:46px;
トグルスイッチ本体の横幅と高さです。値を大きくするとスイッチ全体が大きくなります。
top:5px;・left:5px;
丸いノブの初期位置です。それぞれスイッチの上端と左端からの間隔を設定しています。
width:36px;・height:36px;
丸いノブの大きさです。値を大きくするとノブが大きくなります。
transition:0.3s;
スイッチの背景色とノブが切り替わる時間です。0.3秒で変化し、値を大きくするとゆっくり、小さくすると速くなります。
transform:translateX(42px);
ON時にノブを右へ移動する距離です。42pxを変更するとON時のノブの停止位置が変わります。
max-width:520px;
表示画像の最大横幅です。値を大きくすると画像を大きく表示できます。
aspect-ratio:16 / 9;
表示画像の縦横比です。このサンプルでは16:9で表示します。
border-radius:14px;
表示画像の角丸です。値を大きくすると画像の丸みが強くなります。
box-shadow:0 10px 24px rgba(15,23,42,0.12);
表示画像の影です。10pxや24pxを変更すると影の位置や広がりを調整できます。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssでは全体にwidth:100%とmax-width:720px、画像にwidth:100%とmax-width:520pxを指定しているため、画面幅に合わせて縮小されます。
画面幅640px以下ではページ全体の余白を24px 12px、画像切り替え全体の余白を24px 18pxへ縮小します。また、項目名とトグルスイッチをflex-direction:columnで縦並びに変更するため、スマートフォン・タブレット・PCで利用できます。
コメント