フォームブロックに置いて各フィールドに対してスライダーを生成し、操作性を向上させるガジェットのご紹介です。
name値とスライダー設定を指定するだけで、自動的にスライダーが生成され、初期値が設定されます。
注意点
・スライダーの範囲やステップ値を適切に設定してください
・HTML5の<input type="range">を使用しているため、古いブラウザでは動作しない可能性があります
・HTML5の<input type="range">を使用しているため、古いブラウザでは動作しない可能性があります
コード設定方法
ブロックもしくはページの Javascript タブにコードを貼り付けて、スライダー設定を変更してください。
設定値は例で入れていますので、参考に変更をしてください。
Javascript
CSS
スライダー設定例
設定値は例で入れていますので、参考に変更をしてください。
Javascript
// 設定値 function setSliderValues() { createSlider('f01', { min: 0, max: 100, step: 1 }); createSlider('f02', { min: 0, max: 10, step: 2 }); createRangeSlider('f03', 'f04', { min: 0, max: 100, step: 1 }); createSlider('f05', { min: 0, max: 100, step: 1, thresholds: { yellow: 40, red: 70 } }); } // ページ読み込み時の初期化処理 // 他の強化ガジェットと併用する場合はこちらに記載 window.onload = function () { setSliderValues(); }; // 以下編集不要 // 汎用スライダー生成関数 function createSlider(name, options = {}) { const inputElement = document.querySelector(`input[name="${name}"]`); if (!inputElement) return console.error(`Slider input [name="${name}"] not found.`); const { min = 0, max = 100, step = 1, thresholds } = options; inputElement.style.display = 'none'; const slider = document.createElement('input'); slider.type = 'range'; slider.min = min; slider.max = max; slider.step = step; slider.value = inputElement.value || min; inputElement.value = slider.value; // 初期値を同期 // スライダーの色変更 (thresholdsが指定された場合のみ) const updateSliderColor = (slider, value) => { if (thresholds) { if (value >= thresholds.red) { slider.style.backgroundColor = 'red'; } else if (value >= thresholds.yellow) { slider.style.backgroundColor = 'yellow'; } else { slider.style.backgroundColor = ''; } } }; // 初期色設定 updateSliderColor(slider, slider.value); // スライダー値の同期処理 slider.addEventListener('input', () => { inputElement.value = slider.value; updateSliderColor(slider, slider.value); // 値表示 let displaySpan = inputElement.parentNode.querySelector('.slider-value'); if (!displaySpan) { displaySpan = document.createElement('span'); displaySpan.classList.add('slider-value'); inputElement.parentNode.insertBefore(displaySpan, inputElement.nextSibling); } displaySpan.textContent = slider.value; }); // DOMにスライダーを追加 inputElement.parentNode.insertBefore(slider, inputElement); // 初期値を表示 let displaySpan = inputElement.parentNode.querySelector('.slider-value'); if (!displaySpan) { displaySpan = document.createElement('span'); displaySpan.classList.add('slider-value'); inputElement.parentNode.insertBefore(displaySpan, inputElement.nextSibling); } displaySpan.textContent = slider.value; return slider; // スライダー要素を返す } // 範囲スライダー生成関数 function createRangeSlider(minName, maxName, options = {}) { const minInput = document.querySelector(`input[name="${minName}"]`); const maxInput = document.querySelector(`input[name="${maxName}"]`); if (!minInput || !maxInput) return console.error(`Range slider inputs [name="${minName}"] or [name="${maxName}"] not found.`); const { min = 0, max = 100, step = 1 } = options; const minSlider = createSlider(minName, { min, max, step }); const maxSlider = createSlider(maxName, { min, max, step }); // スライダー値の連動 minSlider.addEventListener('input', () => { maxSlider.min = minSlider.value; if (parseInt(minSlider.value) > parseInt(maxSlider.value)) { maxSlider.value = minSlider.value; maxInput.value = maxSlider.value; } }); maxSlider.addEventListener('input', () => { minSlider.max = maxSlider.value; if (parseInt(maxSlider.value) < parseInt(minSlider.value)) { minSlider.value = maxSlider.value; minInput.value = minSlider.value; } }); }
CSS
/* スライダーのスタイル */ input[type="range"] { -webkit-appearance: none; width: 200px; height: 10px; background: #ddd; outline: none; border-radius: 5px; margin-bottom: 10px; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 20px; height: 20px; background: #4CAF50; border-radius: 50%; cursor: pointer; } /* スライダー値表示用 */ span.slider-value { display: inline-block; margin-left: 10px; }
スライダー設定例
上記の`setSliderValues`関数を参考にして、スライダーを簡単に設定できます。以下に詳細な使用方法を記載します。
関数の詳細な説明
ここでは、スライダー生成のための関数`createSlider`と`createRangeSlider`の詳細な説明を記載します。
createSlider
単一のスライダーを生成します。
機能
createRangeSlider
2つのスライダーを連携して範囲選択スライダーを生成します。
機能
createSlider
単一のスライダーを生成します。
- パラメータ
name
: 対象のフィールドのname値を指定します。options
: オプション設定。以下のプロパティを含みます。min
: スライダーの最小値 (デフォルト: 0)。max
: スライダーの最大値 (デフォルト: 100)。step
: スライダーのステップ値 (デフォルト: 1)。thresholds
: 値に応じた色を変更するための閾値 (オプション)。オブジェクト形式で指定します。- 使用例
createSlider('f01', { min: 0, max: 100, step: 1 });
createSlider('f05', { min: 0, max: 100, step: 1, thresholds: { yellow: 40, red: 70 } });40を超えると黄色に、70を超えると赤になります。
- 指定されたフィールドを対象にスライダーを生成します。
- スライダー操作時に、対応するhiddenフィールドに値を反映します。
- スライダーの値に応じて背景色を変更する設定が可能です。
createRangeSlider
2つのスライダーを連携して範囲選択スライダーを生成します。
- パラメータ
minName
: 範囲の最小値を設定するフィールドのname値。maxName
: 範囲の最大値を設定するフィールドのname値。options
: オプション設定。以下のプロパティを含みます。min
: スライダーの最小値 (デフォルト: 0)。max
: スライダーの最大値 (デフォルト: 100)。step
: スライダーのステップ値 (デフォルト: 1)。- 使用例
createRangeSlider('f03', 'f04', { min: 0, max: 100, step: 1 });
- 2つのスライダーを連携し、片方の値が変更された場合、もう片方のスライダーの範囲制約を自動調整します。
- 値が逆転しないように安全な値設定を行います。
最後に
設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。