メインコンテンツにスキップ
バージョン: v8

ion-range

shadow

レンジスライダーを使用すると、スライダーノブを動かすことでユーザーは値の範囲から選択できます。デフォルトでは、1つのノブが範囲の値を制御します。この動作は、デュアルノブを使用してカスタマイズできます。

デフォルトでは、レンジスライダーの最小値は0、最大値は100です。これは、minプロパティとmaxプロパティで設定できます。

ラベル

ラベルは範囲を説明するために使用する必要があります。これらは視覚的に使用でき、ユーザーが範囲に焦点を合わせているときにはスクリーンリーダーによっても読み上げられます。これにより、ユーザーは範囲の意図を理解しやすくなります。レンジには、ラベルを割り当てるためのいくつかの方法があります。

  • labelプロパティ: プレーンテキストラベルに使用
  • labelスロット: カスタムHTMLラベルに使用
  • aria-label: スクリーンリーダーにラベルを提供するために使用しますが、可視ラベルは追加しません

ラベルの配置

以下のデモでは、labelPlacementプロパティを使用して、範囲に対するラベルの位置を変更する方法を示します。ここではlabelプロパティを使用していますが、labelPlacementlabelスロットでも使用できます。

ラベルスロット

プレーンテキストラベルはlabelプロパティを介して渡す必要がありますが、カスタムHTMLが必要な場合は、代わりにlabelスロットを介して渡すことができます。

可視ラベルなし

可視ラベルが必要ない場合でも、開発者はaria-labelを提供して、スクリーンリーダーで範囲にアクセスできるようにする必要があります。

装飾

装飾要素は、範囲のstartまたはendスロットに渡すことができます。これは、低音量や高音量アイコンなどのアイコンを追加する場合に便利です。これらの要素は装飾的なものであるため、スクリーンリーダーなどの支援技術によってアナウンスされるべきではありません。

ドキュメントの方向が左から右に設定されている場合、start位置にスロットされたコンテンツは範囲の左側に表示され、end位置にスロットされたコンテンツは範囲の右側に表示されます。右から左 (rtl) の方向に設定されている場合、start位置にスロットされたコンテンツは範囲の右側に表示され、end位置にスロットされたコンテンツは範囲の左側に表示されます。

デュアルノブ

デュアルノブは、ユーザーが下限と上限で値を選択するために使用できる2つのノブコントロールを導入します。選択すると、レンジは選択された上限値と下限値を含むRangeValueionChangeイベントを発行します。

ピン

pin属性は、ドラッグされたときにノブの上にレンジの値を表示します。これにより、ユーザーは範囲内の特定の値を選択できます。

pinFormatter関数を使用すると、開発者はレンジ値の形式をユーザーに合わせてカスタマイズできます。

スナップと目盛り

目盛りは、レンジで使用可能な各値のインジケーターを表示します。目盛りを使用するには、開発者はsnapsプロパティとticksプロパティの両方をtrueに設定する必要があります。

スナップを有効にすると、レンジノブはドラッグしてリリースされると、最も近い使用可能な値にスナップします。

イベント処理

ionChangeの使用

ionChangeイベントは、レンジノブの値が変更されると発行されます。

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

ionKnobMoveStartionKnobMoveEndの使用

ionKnobMoveStartイベントは、マウスドラッグ、タッチジェスチャ、またはキーボード操作のいずれかによって、レンジノブのドラッグが開始されたときに発行されます。逆に、ionKnobMoveEndは、レンジノブがリリースされたときに発行されます。どちらのイベントもRangeValue型で発行され、dualKnobsプロパティと組み合わせて機能します。

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

テーマ設定

CSSカスタムプロパティ

レンジには、アプリケーションのデザインに合わせてレンジコンポーネントの外観をすばやくテーマ設定およびカスタマイズするためのCSS変数が含まれています。

CSSシャドウパーツ

レンジには、レンジコンポーネント内の特定の要素ノードを完全にカスタマイズできるようにするCSSシャドウパーツが含まれています。CSSシャドウパーツは、最大限のカスタマイズ機能を提供し、レンジコンポーネントで高度なスタイル設定が必要な場合に推奨されるアプローチです。

レガシーレンジ構文からの移行

Ionic 7.0では、よりシンプルなレンジ構文が導入されました。この新しい構文では、レンジを設定するために必要なボイラープレートが削減され、アクセシビリティの問題が解決され、開発者のエクスペリエンスが向上します。

開発者は、この移行を一度に1つのレンジずつ実行できます。開発者は引き続きレガシー構文を使用できますが、できるだけ早く移行することをお勧めします。

最新の構文の使用

最新の構文の使用には、ion-labelを削除し、labelプロパティを使用してラベルをion-rangeに渡すことが含まれます。ラベルの配置は、labelPlacementプロパティを使用して設定できます。

ラベルにカスタムHTMLが必要な場合は、代わりにlabelスロットを使用してion-range内に直接渡すことができます。

<!-- Basic -->

<!-- Before -->
<ion-item>
<ion-label>Notifications</ion-label>
<ion-range></ion-range>
</ion-item>

<!-- After -->
<ion-item>
<ion-range label="Notifications"></ion-range>
</ion-item>

<!-- Fixed Labels -->

<!-- Before -->
<ion-item>
<ion-label position="fixed">Notifications</ion-label>
<ion-range></ion-range>
</ion-item>

<!-- After -->
<ion-item>
<ion-range label-placement="fixed" label="Notifications"></ion-range>
</ion-item>

<!-- Range at the start of line, Label at the end of line -->

<!-- Before -->
<ion-item>
<ion-label slot="end">Notifications</ion-label>
<ion-range></ion-range>
</ion-item>

<!-- After -->
<ion-item>
<ion-range label-placement="end" label="Notifications"></ion-range>
</ion-item>

<!-- Custom HTML label -->

<!-- Before -->
<ion-item>
<ion-label>
<div class="custom-label">Notifications</div>
</ion-label>
<ion-range></ion-range>
</ion-item>

<!-- After -->
<ion-item>
<ion-range>
<div slot="label" class="custom-label">Notifications</div>
</ion-range>
</ion-item>
注意

以前のバージョンのIonicでは、ion-rangeが適切に機能するためにはion-itemが必要でした。Ionic 7.0以降では、アイテムがion-listに配置されている場合にのみ、ion-itemion-rangeを使用する必要があります。さらに、ion-rangeが適切に機能するためにion-itemは必要なくなりました。

レガシー構文の使用

Ionicは、アプリが最新のレンジ構文を使用しているかどうかを検出するためのヒューリスティックを使用します。場合によっては、レガシー構文を引き続き使用することをお勧めします。開発者は、レンジのそのインスタンスにレガシー構文を使用させるために、ion-rangelegacyプロパティをtrueに設定できます。

インターフェース

RangeChangeEventDetail

interface RangeChangeEventDetail {
value: RangeValue;
}

RangeKnobMoveStartEventDetail

interface RangeKnobMoveStartEventDetail {
value: RangeValue;
}

RangeKnobMoveEndEventDetail

interface RangeKnobMoveEndEventDetail {
value: RangeValue;
}

RangeCustomEvent

必須ではありませんが、このインターフェースは、このコンポーネントから発行されるIonicイベントの型をより厳密に定義するために、CustomEventインターフェースの代わりに使用できます。

interface RangeCustomEvent extends CustomEvent {
detail: RangeChangeEventDetail;
target: HTMLIonRangeElement;
}

RangeValue

type RangeValue = number | { lower: number, upper: number };

プロパティ

activeBarStart

説明レンジのアクティブバーの開始位置。この機能は、シングルノブ(dualKnobs="false")でのみ利用可能です。有効な値は、最小値以上、最大値以下です。
属性active-bar-start
number | undefined
デフォルトundefined

color

説明アプリケーションのカラーパレットで使用する色。デフォルトのオプションは、"primary""secondary""tertiary""success""warning""danger""light""medium"、および"dark"です。色の詳細については、テーマを参照してください。
属性color
"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string | undefined
デフォルトundefined

debounce

説明レンジの値が変更されるたびに、ionInputイベントをトリガーするまでの待機時間(ミリ秒単位)。
属性debounce
number | undefined
デフォルトundefined

disabled

説明trueの場合、ユーザーはレンジを操作できません。
属性disabled
boolean
デフォルトfalse

dualKnobs

説明2つのノブを表示します。
属性dual-knobs
boolean
デフォルトfalse

label

説明コントロールのラベルとして表示するテキスト。プレーンテキストのみが必要な場合は、labelスロットの代わりにこれを使用します。labelプロパティとlabelスロットの両方が使用されている場合、labelプロパティがlabelスロットよりも優先されます。
属性label
string | undefined
デフォルトundefined

labelPlacement

説明レンジに対するラベルの配置場所。"start":ラベルはLTRではレンジの左側に、RTLでは右側に表示されます。"end":ラベルはLTRではレンジの右側に、RTLでは左側に表示されます。"fixed":ラベルは"start"と同じ動作をしますが、固定幅も持ちます。長いテキストは省略記号("...")で切り捨てられます。"stacked":ラベルは方向に関係なく、レンジの上に表示されます。
属性label-placement
"end" | "fixed" | "stacked" | "start"
デフォルト'start'

max

説明レンジの最大整数値。
属性max
number
デフォルト100

min

説明レンジの最小整数値。
属性min
number
デフォルト0

mode

説明モードは、使用するプラットフォームスタイルを決定します。
属性mode
"ios" | "md"
デフォルトundefined

name

説明フォームデータと一緒に送信されるコントロールの名前。
属性name
string
デフォルトthis.rangeId

pin

説明trueの場合、ノブが押されたときに整数値のピンが表示されます。
属性pin
boolean
デフォルトfalse

pinFormatter

説明ピンテキストのフォーマットに使用されるコールバック。デフォルトでは、ピンテキストはMath.round(value)に設定されます。

コールバック内からthisにアクセスする必要がある場合は、https://ionic.dokyumento.jp/docs/troubleshooting/runtime#accessing-thisを参照してください。
属性undefined
(value: number) => string | number
デフォルト(value: number): number => Math.round(value)

snaps

説明trueの場合、ノブはstepプロパティ値に基づいて均等に配置された目盛りにスナップします。
属性snaps
boolean
デフォルトfalse

step

説明値の粒度を指定します。
属性step
number
デフォルト1

ticks

説明trueの場合、stepの値に基づいて目盛りが表示されます。snapstrueの場合にのみ適用されます。
属性ticks
boolean
デフォルトtrue

value

説明レンジの値。
属性value
number | { lower: number; upper: number; }
デフォルト0

イベント

名前説明バブル
ionBlurレンジがフォーカスを失ったときに発行されます。true
ionChangeionChangeイベントは、ユーザーが要素の値を変更したときに<ion-range>要素に対して発生します:- ユーザーがドラッグ後にノブを離したとき。- ユーザーがキーボードの矢印でノブを移動したとき

このイベントは、プログラムでvalueプロパティを設定する場合には発生しません。
true
ionFocusレンジがフォーカスされたときに発行されます。true
ionInputionInputイベントは、値が変更されたときに<ion-range>要素に対して発生します。ionChangeとは異なり、ionInputはユーザーがノブをドラッグしている間、継続的に発生します。true
ionKnobMoveEndマウスドラッグ、タッチジェスチャ、キーボード操作のいずれであっても、ユーザーがレンジノブの移動を終了したときに発行されます。true
ionKnobMoveStartマウスドラッグ、タッチジェスチャ、キーボード操作のいずれであっても、ユーザーがレンジノブの移動を開始したときに発行されます。true

メソッド

このコンポーネントで使用できるパブリックメソッドはありません。

CSSシャドウパーツ

名前説明
barバーの非アクティブな部分。
bar-activeバーのアクティブな部分。
knobレンジをドラッグするために使用されるハンドル。
labelレンジを説明するラベルテキスト。
pinノブの上に表示されるカウンター。
tick非アクティブな目盛り。
tick-activeアクティブな目盛り。

CSSカスタムプロパティ

名前説明
--bar-backgroundレンジバーの背景
--bar-background-activeアクティブなレンジバーの背景
--bar-border-radiusレンジバーのボーダー半径
--bar-heightレンジバーの高さ
--heightレンジの高さ
--knob-backgroundレンジノブの背景
--knob-border-radiusレンジノブのボーダー半径
--knob-box-shadowレンジノブのボックスシャドウ
--knob-sizeレンジノブのサイズ
--pin-backgroundレンジピンの背景(MDモードでのみ利用可能)
--pin-colorレンジピンの色(MDモードでのみ利用可能)

スロット

名前説明
endコンテンツは、LTRではレンジスライダーの右側、RTLでは左側に配置されます。
labelレンジに関連付けるラベルテキスト。「labelPlacement」プロパティを使用して、ラベルをレンジに対して配置する場所を制御します。
startコンテンツは、LTRではレンジスライダーの左側、RTLでは右側に配置されます。