ScrollToIndexコマンド


ScrollToIndexコマンド

スクロール可能なコンポーネントを前方または後方にスクロールして、子コンポーネントのindexで指定された特定の子コンポーネントを表示します。スクロール可能なコンポーネントには、次のものがあります。

プロパティ

ScrollToIndexコマンドには、共通のコマンドプロパティに加えて、以下の表に示すプロパティがあります。typeプロパティはScrollToIndexに設定します。

コマンドを実行するために値が必要なプロパティの場合、以下の表の「デフォルト」列に「必須」と表示されています。それ以外の場合はデフォルト値が表示されますが、デフォルト値がないこともあります。

プロパティ デフォルト 説明

align

firstlastcentervisible

visible

スクロール後の項目の配置です。

componentId

セレクター

:source

表示領域に移動する子コンポーネントの親です。

index

整数

必須

表示する子コンポーネントの0から始まるインデックスです。

targetDuration

負でない整数

システムのデフォルト

スクロールアニメーションの目標時間(ミリ秒)です。

たとえば、リストに表示されるレシピの5番目のステップにスクロールするには、次のようにindexを4に設定します。

  {
    "type": "ScrollToIndex",
    "componentId": "recipeSteps",
    "index": 4,
    "align": "center"
  }

componentIdは、SequenceScrollViewGridSequenceコンポーネントである必要はありません。ScrollToIndexコマンドは、componentIdの箇所またはその前にある、最初のSequenceScrollViewGridSequenceのいずれかを探し、そこにスクロールします。

ユーザーが画面をタッチすると、スクロールは停止します。コマンドを停止すると、スクロールは直ちに停止されます。

ScrollToIndexコマンドは、高速モードでは無視されます。

align

スクロール後かつ発話前の画面における項目の配置です。配置の列挙値には次のオプションがあります。

配置 説明

first

項目の左上がスクロールコンテナーの左上に配置されます。

center

項目の中央がコンテナーの中央に配置されます。

last

項目の右下がスクロールコンテナーの右下に配置されます。

visible

項目を全体表示するのに必要な分だけ移動します。

componentId

コマンドのターゲットコンポーネントの親を識別するセレクターです。指定しない場合は、デフォルトで:sourceになります。:sourceセレクターは、ScrollToIndexコマンドを発行したコンポーネントをターゲットにします。

targetDuration

スクロールアニメーションの目標時間(ミリ秒)です。コマンドは指定された時間だけスクロールを試みますが、ランタイムによって異なる場合があります。targetDurationを指定しない場合、コマンドはランタイムで定義されている時間を使用します。targetDurationを0に設定すると、スクロール位置に即座に移動します。

index

親コンテナー内でスクロールして表示する子項目の0から始まるインデックスです。負の値の場合は、親コンテナーの末尾から数えます。たとえば、リスト内の最後から2番目の項目を表示するには、次のように記述します。

  {
    "type": "ScrollToIndex",
    "index": -2,
  }

表示する項目を見つけるためのアルゴリズムは、概ね以下のように記述できます。

  let itemIndex = index < 0 ? index + children.length : index;
  if (itemIndex >= 0 && itemIndex < children.length) {
    let child = children[itemIndex];
    scrollIntoView(child);
  }

ScrollToComponentとScrollToIndex

APL 2023.1以降では、ScrollToIndexの代わりに、ScrollToComponentコマンドをセレクター構文と組み合わせて使用できます。

たとえば、次の2つの例は同等のコマンドを示しています。これらの例では、SELECTORにはスクロールコンポーネントのID、INDEXにはスクロールして表示するコンポーネントの数値インデックスが格納されています。

{
  "type": "ScrollToIndex",
  "componentId": "SELECTOR"
  "index": INDEX
}
{
  "type": "ScrollToComponent",
  "componentId": "SELECTOR:child(INDEX)"
}

再インフレート時の処理方針

Reinflateコマンドを実行すると、Alexaがドキュメントを再インフレートした後でScrollToIndexコマンドを再開できます。コマンドは、ReinflatepreservedSequencers配列で指定されたsequencerで実行されている場合に再開されます。このコマンドでは、スクロール可能なターゲットコンポーネント、ターゲットのインデックス、配置が保存されます。

再インフレートされた階層内にスクロールコンポーネントが含まれてない場合、コマンドは無視されます。

Alexaがドキュメントを再インフレートすると、スクロールが再開され、alignで指定された位置にターゲットのインデックスに対応する項目がスクロールされます。

ScrollToIndexの例

以下は、長い項目リストを表示するSequenceの例です。TopボタンとBottomボタンは、indexプロパティをそれぞれ0-1に設定してScrollToIndexを実行します。その他の3つのボタンでは、リスト内の項目のパーセンテージに基づいてindexを計算し、alignプロパティにcenterオプションを使用して実行されます。



このページは役に立ちましたか?

最終更新日: 2025 年 12 月 04 日