HTMLでスライダーバーを作成する:input type="range" の詳細ガイド


基本的な構文

<input type="range" id="myRange" name="myRange" min="10" max="100" value="50">

この例では、以下のことが定義されます。

  • value="50":スライダーバーの初期値を50に設定
  • max="100":選択できる最大値を100に設定
  • min="10":選択できる最小値を10に設定
  • name="myRange":送信時に送信されるデータの名前を指定
  • id="myRange":スライダーバーにユニークなIDを設定

属性

input type="range"要素には、以下の属性を指定できます。

  • orient: スライダーバーの方向を決定します。可能な値はhorizontalverticalです。デフォルトはhorizontalです。
  • appearance: ブラウザがスライダーバーをどのように表示するかを制御します。可能な値はnoneslidertextfieldです。デフォルトはautoです。
  • list: スライダーバーで使用できる値のリストを指定するdatalist要素のIDを指定します。
  • readonly: スライダーバーを編集不可にします。
  • disabled: スライダーバーを無効化します。
  • id: スライダーバーにユニークなIDを設定します。
  • name: 送信時に送信されるデータの名前を指定します。
  • value: スライダーバーの初期値を設定します。
  • step: スライダーバーの目盛りの間隔を設定します。デフォルトは1です。
  • max: 選択できる最大値を設定します。デフォルトは100です。
  • min: 選択できる最小値を設定します。デフォルトは0です。

イベント

input type="range"要素は、以下のイベントを発生させることができます。

  • change: スライダーバーの値が変更され、かつユーザーがフォーカスを外したときに発生します。
  • input: スライダーバーの値が変更されたときに発生します。

以下の例は、音量調整スライダーバーを作成するものです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>音量調整</title>
</head>
<body>
  <label for="volume">音量:</label>
  <input type="range" id="volume" name="volume" min="0" max="100" value="50">

  <script>
    const volumeSlider = document.getElementById('volume');
    const volumeLabel = document.querySelector('label[for="volume"]');

    volumeSlider.addEventListener('input', function() {
      const volume = volumeSlider.value;
      volumeLabel.textContent = `音量: ${volume}`;
    });
  </script>
</body>
</html>

この例では、以下のことが行われます。

  1. 音量ラベルとスライダーバーを作成します。
  2. スライダーバーの値が変更されたときに、inputイベントが発生します。
  3. inputイベントハンドラ内で、スライダーバーの現在の値を取得し、音量ラベルに表示します。
  • ARIA属性を使用して、アクセシビリティを向上させることができます。
  • CSSを使用して、スライダーバーの外観をカスタマイズすることができます。
  • input type="range"要素の外観は、ブラウザによって異なる場合があります。


音量調整スライダー

この例は、前面で紹介した音量調整スライダーバーのコードを少し改良したものです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>音量調整</title>
</head>
<body>
  <label for="volume">音量:</label>
  <input type="range" id="volume" name="volume" min="0" max="100" value="50">
  <p id="volume-label">音量: 50</p>

  <script>
    const volumeSlider = document.getElementById('volume');
    const volumeLabel = document.getElementById('volume-label');

    volumeSlider.addEventListener('input', function() {
      const volume = volumeSlider.value;
      volumeLabel.textContent = `音量: ${volume}`;
    });
  </script>
</body>
</html>

この例では、以下の変更を行っています。

  • JavaScriptを使用して、音量ラベルのテキストコンテンツを動的に更新するようにしました。
  • 音量ラベルのHTML構造をp要素に変更しました。

フォントサイズスライダー

この例は、フォントサイズを選択できるスライダーバーを作成するものです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>フォントサイズ調整</title>
</head>
<body>
  <label for="fontSize">フォントサイズ:</label>
  <input type="range" id="fontSize" name="fontSize" min="8" max="72" value="16">
  <p id="fontSizeLabel">フォントサイズ: 16px</p>

  <style>
    p {
      font-size: 16px;
    }
  </style>

  <script>
    const fontSizeSlider = document.getElementById('fontSize');
    const fontSizeLabel = document.getElementById('fontSizeLabel');
    const paragraph = document.querySelector('p');

    fontSizeSlider.addEventListener('input', function() {
      const fontSize = fontSizeSlider.value + 'px';
      fontSizeLabel.textContent = `フォントサイズ: ${fontSize}`;
      paragraph.style.fontSize = fontSize;
    });
  </script>
</body>
</html>

この例では、以下のことを行っています。

  • inputイベントハンドラ内で、スライダーバーの現在の値を取得し、フォントサイズラベルと段落のフォントサイズに設定します。
  • スライダーバーの値が変更されたときに、inputイベントが発生します。
  • フォントサイズスライダーバーを作成します。

この例は、色相を選択できるスライダーバーを作成するものです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>色相選択</title>
</head>
<body>
  <label for="hue">色相:</label>
  <input type="range" id="hue" name="hue" min="0" max="360" value="180">
  <canvas id="colorPicker"></canvas>

  <script>
    const hueSlider = document.getElementById('hue');
    const colorPicker = document.getElementById('colorPicker');
    const ctx = colorPicker.getContext('2d');

    hueSlider.addEventListener('input', function() {
      const hue = hueSlider.value;
      const color = `hsl(${hue}, 100%, 50%)`;
      ctx.fillStyle = color;
      ctx.fillRect(0, 0, colorPicker.width, colorPicker.height);
    });
  </script>
</body>
</html>
  • inputイベントハンドラ内で、スライダーバーの現在の値を取得し、キャンバス要素に1色塗りつぶします。
  • スライダーバーの値が変更されたときに、inputイベントが発生します。
  • 色相スライダーバーを作成します。


数値入力 (input type="number")

  • 欠点:
    • 視覚的に直感的な操作ではない
    • マウス操作で値を選択するには煩雑
  • 利点:
    • より精度の高い値入力が可能
    • キーボードからの入力に適している

スピンボタン

  • 欠点:
    • 入力できる範囲が限られている
    • 精度の高い値入力が難しい
  • 利点:
    • 数値入力を簡単に行える
    • 上下ボタンをクリックするだけで値を上げ下げできる

カスタムスライダー

  • 欠点:
    • 開発に時間がかかる
    • ブラウザ間の互換性に問題が生じる可能性がある
  • 利点:
    • デザインを自由にカスタマイズできる
    • 複雑な機能を追加できる

ドラッグドロップ

  • 欠点:
    • 精度の高い値入力が難しい
    • モバイルデバイスでは操作が難しい場合がある
  • 利点:
    • 視覚的に直感的な操作が可能
    • 広い範囲の値を選択できる
  • ブラウザ互換性
    すべてのブラウザで同じように動作する入力方法を選択する必要があります。
  • 開発時間
    カスタムスライダーの作成には時間がかかるため、開発時間とリソースを考慮する必要があります。
  • デザイン
    アプリケーションのデザインに合った入力方法を選択する必要があります。
  • 操作性
    ユーザーにとって使いやすい入力方法を選択する必要があります。
  • 必要な精度
    精度の高い値入力が求められる場合は、数値入力の方が適しています。