APL標準コマンド(1.0)
(これはAPLの最新バージョンではありません。APLの最新バージョンの資料を参照するには、その他のバージョンオプションをクリックしてください)
- 共通プロパティ
- AutoPageコマンド
- Idleコマンド
- Parallelコマンド
- Scrollコマンド
- ScrollToIndexコマンド
- SendEventコマンド
- Sequentialコマンド
- SetPageコマンド
- SetStateコマンド
- SetValueコマンド
- SpeakItemコマンド
- SpeakListコマンド
関連トピック: APLコマンドの概要とAPLメディアコマンドも参照してください。
共通プロパティ
1つのコマンドはJSONオブジェクトとしてエンコードされます。すべてのコマンドには、以下のプロパティを含めることができます。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
type | 文字列 | ◯ | コマンドの型です。 |
description | 文字列 | ✕ | このコマンドのオプションのドキュメントです。 |
delay | 整数 | ✕ | このコマンドが実行されるまでの遅延時間(ミリ秒単位)です。負以外の値にする必要があります。デフォルトは0です。 |
when | ブール値 | ✕ | 条件式です。評価結果がfalse の場合、コマンドをスキップします。デフォルトはtrue です。 |
type
特定のコマンドを実行するように指定します。定義済みのプリミティブコマンドタイプやユーザー定義コマンドを使用することもできます。
delay
delay
の値は、このコマンドが実行される前に挿入されるミリ秒単位の時間です。delay
の値は正の整数で、指定されてない場合のデフォルト値は0です。whenプロパティがfalse
に解決された場合またはコマンドがイベントハンドラー内部で実行された場合、delay
の値は無視されます。
when
when
がtrue
に設定されると、コマンドが実行されます。false
の場合、コマンドは無視されます。
AutoPageコマンド
AutoPage
コマンドは、Pagerコンポーネントの連続するページを自動的に進めて表示させます。AutoPage
コマンドは、リクエストされた時間内で最終ページを表示した後に終了します。
AutoPage
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
componentId | 文字列 | ◯ | 読み込むコンポーネントのIDです。 |
count | 整数 | ✕ | 表示するページ数です。デフォルトは全ページです。 |
duration | 整数 | ✕ | ページ間で待機する時間です(ミリ秒単位)。デフォルトは0です。 |
たとえば、sports pagerで自動的に次ページを表示するには次のようにします。
{
"type": "AutoPage",
"componentId": "mySportsPager",
"duration": 1000
}
countが正の数でない場合、AutoPage
コマンドを実行しても何も起きません。
終了すると、AutoPage
コマンドは以下のように動作します。
- AutoPageコマンドのシークエンスが50%以上完了している場合、ターゲットページを表示します。
- 50%未満の場合は、前のページに戻ります。
onPageChange
コマンドは、ページが変更された場合に新しいページで1回実行されます。
componentId
PagerコンポーネントのIDです。省略すると、AutoPage
コマンドを発行するコンポーネントが使われます。
count
表示するページ数です。指定しない場合、このデフォルトは残りのページ数となります。ラッピングには対応していません。値は最小値が0、最大値がpager.children.length - pager.currentIndex - 1の範囲に収まるように調整されます。
duration
最初のページを含め、各ページを表示する待ち時間です。アニメーションによるページ間の移動は、すべて合計時間に加算されます。
Idleコマンド
Idle
コマンドを実行しても何も起きません。これはプレースホルダーになっているか、長い一連のコマンドに計算された遅延を挿入するために使用されます。たとえば、次のコマンドを考えてみましょう。
{
"type": "Parallel",
"commands": [
{
"type": "Idle",
"delay": 3000
},
{
"type": "SpeakItem",
"componentId": "item7"
}
]
}
このコマンドシークエンスは「item7」を読み上げます。このIdle
コマンドの使用により、発話が早く終わる場合でも、コマンド全体が少なくとも3000ミリ秒続くことが保証されます。
Idle
コマンドのtype
はIdle
です。
Parallelコマンド
一連のコマンドを並列に実行します。Parallel
コマンドは、すべての子コマンドを同時に実行開始します。Parallel
コマンドは、すべての子コマンドが終了したときに実行完了と見なされます。Parallel
コマンドが早く終了すると、その時点で実行中のコマンドはすべて終了します。
Parallel
コマンドのtypeは、Parallel
です。Parallel
コマンドには、共通のコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
commands | コマンド配列 | ◯ | 並行して実行する順序不同のコマンドのリストです。 |
commands
並行して実行する順序不同のコマンド配列です。すべてのコマンドの実行が終了すると、 Parallel
コマンドは終了します。Parallel
コマンドに設定されるdelay
の値は、配列の各コマンドに設定されるdelay
の値に追加されます。次の例では、最初のSendEvent
コマンドが1500ミリ秒に実行され、2番目のSendEvent
コマンドが750ミリ秒に実行されます。つまり、2番目のSendEvent
コマンドは最初のコマンドよりも先に実行されます。
{
"type": "Parallel",
"delay": 500,
"commands": [
{
"type": "SendEvent",
"delay": 1000
},
{
"type": "SendEvent",
"delay": 250
}
]
}
Scrollコマンド
Scroll
コマンドは、ScrollViewまたはSequenceを一定のページ数だけ前または後にスクロールします。Scroll
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
componentId | 文字列 | ◯ | 読み込むコンポーネントのIDです。 |
distance | 数値 | ✕ | スクロールするページ数です。デフォルトは1です。 |
distanceにはスクロールするページ数を設定します。たとえば、次のようにリストを1ページだけ前にスクロールします。
{
"type": "Scroll",
"componentId": "myScrollingList",
"distance": 1
}
スクロールは次の場合に停止します。
- 目的地に到達したとき。
- スクロール可能なコンテンツの最後に到達したとき。
- ユーザーが画面をタッチしたとき。
- Alexaから新しいコマンドを受信したとき。終了によりすぐにスクロールが停止したとき。
使用可能なすべてのコンテンツをスムーズにスクロールするには、distanceに大きな数を設定します。たとえば、次のようにリストの先頭にスムーズにスクロールバックします。
{
"type": "Scroll",
"componentId": "myScrollingList",
"distance": -10000
}
componentId
ScrollViewまたはSequenceのIDです。省略すると、ScrollPage
コマンドを発行するコンポーネントが使われます。
distance
スクロールする距離です(ページ単位)。1「ページ」とは、ScrollViewまたはSequenceコンポーネントの幅または高さです。負の数字は後方にスクロールします。distance
に0を設定するとスクロールしません。
ScrollToIndexコマンド
ScrollViewまたはSequenceで前方または後方にスクロールして、特定の子コンポーネントが表示されることを確認します。ScrollToIndex
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
align | first | last | \center | visible | ✕ | スクロール後の項目の配置です。デフォルトは「visible」です。 |
componentId | 文字列 | ◯ | 読み込むコンポーネントのIDです。 |
index | 整数 | ◯ | 表示する子の0から始まるインデックスです。 |
たとえば、次のようにリストに表示されるレシピの5番目のステップにスクロールするには、index
を4に設定します。
{
"type": "ScrollToIndex",
"componentId": "recipeSteps",
"index": 4,
"align": "center"
}
componentId
は、Sequence
またはScrollView
コンポーネントである必要はありません。ScrollToIndex
コマンドは、componentId
の箇所またはその上にある、最初のSequence
またはScrollView
を探し、そこにスクロールします。
ユーザーが画面をタッチすると、スクロールは終了します。終了によりすぐにスクロールが停止したとき。
align
スクロール後かつ発話前の画面における項目の配置です。アライメントの列挙値には次のオプションがあります。
配置 | 説明 |
---|---|
first | 項目の左上がスクロールContainerの左上に配置されます。 |
center | 項目の中央がContainerの中央に配置されます。 |
last | 項目の右下がスクロールContainerの右下に配置されます。 |
visible | 項目全体を表示するのに必要な分だけ移動します。 |
componentId
親ContainerのIDです。省略すると、ScrollToIndex
コマンドを発行するコンポーネントが使われます。
index
スクロールして表示するための、親Container内の子項目の0から始まるインデックスです。負の値は親Containerの最後から数えられます。たとえば、次のようにリスト内の最後から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);
}
SendEventコマンド
SendEvent
コマンドを使用して、イベントを生成してAlexaに送信します。以下にSendEvent
コマンドの例を示します。
{
"type": "TouchWrapper",
"id": "buyButton",
"onPress": {
"type": "SendEvent",
"arguments": [
"彼が買いました"
]
},
"item": {
"type": "Text",
"text": "お買い物は今すぐ"
}
}
SendEvent
には、標準的なコマンドプロパティに加えて以下のプロパティを設定します。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
arguments | 引数の配列 | ✕ | Alexaに渡す引数データの配列です。 |
components | 文字列の配列 | ✕ | 値データをAlexaから抽出したりAlexaに提供したりするコンポーネントの配列です。 |
arguments
arguments
プロパティはAlexaに渡される配列です。配列の各要素には、実行時に適用されるデータバインディングが含まれます。これによって引数に${event.source.value}
など、イベント自体についてのデータを含めることができるため、スキル開発者は任意のデータをAlexaに送ることができます。
components
components
プロパティはコンポーネントIDの配列です。各コンポーネントのvalue
がイベントで出力されます。これによってスキル作成者は、フォームのコンテンツがサーバーに直接送信されるようにフォームを作成できます。
UserEvent
SendEvent
メッセージはスキルに送信するTemplateRuntime.UserEvent
メッセージにパッケージされています。TemplateRuntime.UserEvent
メッセージは次のような形式です。
{
"namespace": "TemplateRuntime",
"name": "UserEvent",
"payload": {
"skillID": "XYZZY",
"directiveID": "PDQBACH",
"arguments": [
ARGUMENT1,
ARGUMENT2,
:
],
"components": {
ID1: VALUE1,
ID2: VALUE2,
:
},
"source": {
"type": "Button",
"handler": "Press",
"id": "buyButton",
"value": false
}
}
}
APLランタイムは引数データをより大きなペイロード構造に渡します。その際に、イベントを作成したコンポーネントの種類に関するソース情報や呼び出したハンドラー、コンポーネントのIDも合わせて渡します。
Sequentialコマンド
Sequential
コマンドは、一連のコマンドを順番に実行します。前のコマンドが終了するのを待ってから、次のコマンドを実行します。Sequential
コマンドは、すべての子コマンドが終了すると完了します。Sequential
コマンドが早期に終了すると、現在実行中のコマンドは終了し、以降のコマンドは実行されません。
Sequential
コマンドのtype
はSequential
です。Sequential
コマンドには、共通のコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
commands | コマンド配列 | ◯ | 連続して実行する順番に並んだコマンドのリストです。 |
repeatCount | 整数 | ✕ | デフォルトは0です。 |
commands
実行するコマンド配列です。コマンドの配列は順番に実行され、各コマンドが終了しない限り次のコマンドは開始されません。Sequential
コマンドのdelay
値と、シークエンスdelay
値は累積で計算されます。たとえば、次の例では最初のSendEvent
コマンドは3000ミリ秒後に実行されます。
{
"type": "Sequential",
"delay": 1000,
"repeatCount": 2,
"commands": [
{
"type": "SendEvent",
"delay": 2000
},
{
"type": "SendEvent",
"delay": 2000
}
]
}
repeatCount
この一連のコマンドを繰り返す回数です。デフォルトは0です。負の値は無視されます。
SetPageコマンド
SetPage
コマンドは、Pager
コンポーネントで表示されるページを変更します。SetPage
コマンドは、項目全体が表示されると終了します。SetPage
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
componentId | 文字列 | ◯ | 読み込むコンポーネントのIDです。 |
position | relative | absolute | ✕ | 補正値はrelative かabsolute のいずれかです。デフォルトはabsolute です。 |
value | 整数 | ◯ | 移動距離です。絶対値または相対値で指定できます。 |
PagerにNページある場合、最初のインデックスは0
で、最後のインデックスはN-1
となります。相対位置は現在のページからのオフセットです。たとえば、1ページ先に進めるには次のようにします。
{
"type": "SetPage",
"componentId": "myWeatherPager",
"position": "relative",
"value": 1
}
絶対位置の場合、現在のページにインデックスが付けられます。負の絶対位置はリスト末尾からのオフセットです。たとえば、最後のページに移動するには次のようにします。
{
"type": "SetPage",
"componentId": "myWeatherPager",
"position": "absolute",
"value": -1
}
2ページ間で切り替える場合、間のページは表示されません(Sequence
とは違います)。たとえば、現在のページが13でSetPage
が"position"="relative","value": 2
で実行された場合、現在のページは範囲外となり、12ページ目を表示することなく11ページ目に移動します。
SetPage
コマンドはあらゆるページを表示するように設定できます。Pager
コンポーネントで許可された移動方向は考慮されません。ただし、ラップ動作はページ切り替えの計算に影響します。おおよそのアルゴリズムを参照してください。
SetPage
コマンドの終了時に、SetPage
コマンドシークエンスが50%以上完了していればターゲットページにジャンプし、50%未満の場合は前のページに戻ります。onPageChange
コマンドは、ページが最終ページから変更された場合に終了時に1回実行されます。
componentId
PagerコンポーネントのIDです。省略すると、SetPage
コマンドを発行するコンポーネントが使われます。
position
position
がrelative
の場合、value
は現在のページから移動する相対的なページ数を指定します。position
がabsolute
の場合、value
は表示されるページの番号を絶対値で表します。
value
value
は、移動するページ数か、絶対値で表される移動先のページ番号のいずれかです。
最終位置と方向を計算するアルゴリズムは、おおよそ次の擬似コードとなります。
if (command.position == 'absolute') { //絶対値の移動
let index = command.value < 0 ? pager.children.length + command.value : command.value;
index = Math.max(0, Math.min(pager.children.length - 1, index)); // 範囲を固定
// 最後のインデックスと移動の方向を返します。
if (index == pager.currentIndex)
return NO_MOVE
return (index, index < pager.currentIndex ? "LEFT" : "RIGHT");
}
else { // 相対値の移動
let index = pager.currentIndex + command.value;
// 相対値の移動が範囲外になり、ラッピングに対応していない場合、コマンドは無視されます
if (pager.navigation != "wrap" && (index < 0 || index >= pager.children.length))
return NO_MOVE;
// 適切にラップします
index = ((index % pager.children.length) + pager.children.length) % pager.children.length;
if (index == pager.currentIndex)
return NO_MOVE;
return (index, command.value < 0 ? "LEFT" : "RIGHT");
}
Pagerアニメーションは返された方向に動きます。
このアルゴリズムには、以下の特性があります。
-
絶対値は有効なページの範囲内に固定されます。directionは現在のページと相対的な方向になります。
-
ラッピングしているPagerの相対値は任意にラップします。directionはコマンドで与えられた値によって決まります。ラッピングでは方向は変更されません。
-
ラッピングしていないPagerの相対値は、値が範囲外の場合は無視されます。
SetStateコマンド
各コンポーネントには、スタイルを評価してコンポーネントを表示するための状態が与えられます。SetState
コマンドで、コンポーネントの状態設定を変更します。
SetState
コマンドを利用し、checked
、disabled
、focused
という各種状態を変更できます。focused
状態は設定できますが、消去できません。
karaoke
状態とpressed
状態は直接設定できませんが、SpeakItem
コマンドを使用して変更できます。
SetStateコマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
componentId | 文字列 | ✕ | 値を設定する必要があるコンポーネントのIDです。 |
state | 文字列 | ◯ | 設定する状態の名前です。checked 、disabled 、focused のいずれかになります。 |
value | ブール値 | ◯ | 状態に設定する値です。 |
この例では、TouchWrapperの状態がcheckedに設定されます。
{
"type": "SetState",
"componentId": "myButton",
"state": "checked",
"value": true
}
componentId
状態が変更されるコンポーネントのIDです。このプロパティが省略された場合、SetStateコマンドを発行するコンポーネントが受け取り側となります。
state
変更する状態の名前です。現在のところ、checked
、disabled
、focused
に制限されています。
value
値はコマンドの実行時に評価されます。そのため、既存のコンポーネントのプロパティを活用できます。たとえば、このコマンドでは、現在のコンポーネントのchecked状態が切り替えられます。
{
"type": "SetState"
"state": "checked",
"value": "${!event.source.value}"
}
SetValueコマンド
SetValue
コマンドは、コンポーネントの動的プロパティを変更します。設定可能な値については、各コンポーネントの仕様を参照してください。SetValueを使用すると、コンポーネントの指定したプロパティは変化しますが、画面は再描画されません。コマンドの評価を参照してください。
SetState
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
componentId | 文字列 | ✕ | 値を設定する必要があるコンポーネントのIDです。 |
property | 文字列 | ◯ | 設定するプロパティの名前です。 |
value | 文字列 | ◯ | プロパティに設定する値です。 |
この例では、ジョークのオチが表示されるよう値が設定されています。opacity
の値が1の場合、コンポーネントは完全に表示されるからです。
{
"type": "SetValue"
"componentId": "jokePunchline",
"property": "opacity",
"value": 1
}
SetValueコマンドは、コンポーネントごとにさまざまなプロパティの値を変更するために使用できます。変更可能な具体的なプロパティがコンポーネントごとに記載されています。
componentId
値が変更されるコンポーネントのIDです。このプロパティが省略された場合、SetValue
コマンドを発行するコンポーネントが受け取り側となります。
property
変更されるプロパティの名前です。
value
value
はコマンドの実行時に評価されます。そのため、既存のコンポーネントのプロパティを活用できます。この例では、SetValue
コマンドがターゲットコンポーネントのopacityを現在の値の50%に設定します。
{
"type": "SetValue"
"property": "opacity",
"value": "${event.target.opacity * 0.5}"
}
SpeakItemコマンド
SpeakItem
コマンドは、画面の1つの項目のコンテンツを読み込みます。見えない場合、項目はスクロールされて表示されます。項目にはspeech
プロパティを含める必要があります。
SpeakItem
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
align | first | last | center | visible | ✕ | スクロール後の項目の配置です。デフォルトは「visible」です。 |
componentId | 文字列 | ◯ | 読み込むコンポーネントのIDです。 |
highlightMode | line | block | ✕ | karaokeの適用方法です。行ごとまたはブロック全体に適用します。デフォルトは「block」です。 |
たとえば、次のように1つのTextコンポーネントのコンテンツを読み込み、画面の中央に配置します。
{
"type": "SpeakItem",
"componentId": "myJokeSetup",
"highlightMode": "line",
"align": "center"
}
コンポーネントのkaraoke
状態は、発話中にtrue
に設定され、発話終了後にfalse
に再設定されます。highlightMode
はTextコンポーネントにのみ適用されます。Text
コンポーネントが"highlightMode": "line"
モードで読み込まれるとき、テキストの各行は発話中にkaraoke
状態に設定され、発話終了後にfalse
に再設定されます。
次の制限に注意してください。
-
SpeakItem
コマンドはblock
モードで発話中はコンテンツをスクロールしません。たとえば、コンポーネントがコンポーネントのスクロールContainerより大きい場合、スクロールした後でも見えないContainerからはみ出した部分は、隠れたままになります。 -
円形画面ではコンポーネントを中央揃えにする必要があります。そうしない場合、表示されないコンテンツの部分が多くなってしまいます。
-
SpeakItem
は、highlightMode
がblock
の場合、発話中はテキストの個々の単語や行をハイライトしません。 -
項目をスクロールして表示するのに使用するアルゴリズムは、スクロールするコンポーネントが1つのみであることを想定しています。入れ子構造のコンポーネントには対応していません。
-
speech
プロパティのないコンポーネントもスクロールして表示します。
SpeakItem
コマンドが早く終了すると、視覚的な変更はすべて消去され、音声がすぐに停止されます。
align
スクロール後かつ発話前の画面における項目の配置です。アライメントの列挙値には次のオプションがあります。
配置 | 説明 |
---|---|
first | 項目の左上がスクロールContainerの左上に配置されます。 |
center | 項目の中央がContainerの中央に配置されます。 |
last | 項目の右下がスクロールContainerの右下に配置されます。 |
visible | 項目全体を表示するのに必要な分だけ移動します。 |
componentId
発話コンポーネントのIDです。省略すると、SpeakItemコマンドを発行するコンポーネントが使われます。
highlightMode
発話中にTextコンポーネントのコンテンツをスタイル設定する方法を制御します。「block」に設定すると、発話中にTextコンポーネント全体のkaraoke状態の設定がtrueになります。highlightModeを「line」に設定すると、Textコンポーネントの各行が個別に処理されます。各行は、alignプロパティに合わせてスクロールされ、個別にスタイル設定されます。行ごとのKaraokeモードでは、スタイル設定の変更ができるのはcolorプロパティだけです。他のプロパティは無視されます。
SpeakListコマンド
共通Container内にある項目のコンテンツを読み取ります。各項目がスクロール表示され、その後に発話されます。各項目にはspeech
プロパティを含める必要があります。
SpeakList
コマンドには、標準的なコマンドプロパティに加えて以下のプロパティがあります。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
align |
列挙次のいずれかになります。first | center | last | visible |
✕ | 項目の配置です。デフォルトはvisible です。 |
componentId |
文字列 | ◯ | [Sequence][apml-sequenceまたはContainer](またはその他のホスティングコンポーネント)のIDです。 |
count |
integer | ◯ | 読み取る子の数です。 |
minimumDwellTime |
number | ✕ | 項目をハイライトするミリ秒単位の最小時間です。デフォルトは0です。 |
start |
integer | ◯ | 読み取りを開始する項目のインデックスです。 |
minimumDwellTime
を使用すると、タイトルの短い項目の読み上げが早くなりすぎないようにできます。たとえば、「ヴェノム」、「フェンス」、「ウィンストン・チャーチル/ ヒトラーから世界を救った男」といった映画のタイトルが並んでいる場合、最初の2つの項目では、休止時間がわずかに必要になります。
この例では、一覧のうち3つのコンポーネントが読み上げられ、それぞれが画面の中央に表示されます。
{
"type": "SpeakList",
"componentId": "movieList",
"start": 3,
"count": 3,
"minimumDwellTime": 700,
"align": "center"
}
コンポーネントのkaraoke
状態は各コンポーネントの発話中にtrue
に設定され、発話の終了後、false
に再設定されます。
以下のSpeakList
コマンドの特性に注意してください。
SpeakList
コマンドは発話中、コンテンツをスクロールしません。たとえば、コンポーネントがコンポーネントのスクロールContainerより大きい場合、スクロールした後でも見えないContainerからはみ出した部分は、隠れたままになります。- 円形画面ではコンポーネントを
center
揃えにする必要があります。そうしない場合、表示されないコンテンツの部分が多くなってしまいます。 SpeakList
は、発話中はテキストの個々の単語や行をハイライトしません。- スクロールして項目を表示するには、コンポーネント階層を上の方向に検索し、スクロール可能な最初の上位コンポーネントを見つけます。
- 項目をスクロールして表示するのに使用するアルゴリズムは、スクロールするコンポーネントが1つのみであることを想定しています。SpeakListは、入れ子構造のスクロールコンポーネントには対応していません。
- speechプロパティのないコンポーネントもスクロールして表示します。
- speechプロパティがなく、正の
minimumDwellTime
値があるコンポーネントは、その間はkaraokeに設定されます。 - speechプロパティがなく、正の
minimumDwellTime
値もないコンポーネントは、karaokeに設定されません。
align
スクロール後かつ発話前の画面における項目の配置です。アライメントの列挙値には次のオプションがあります。
配置 | 説明 |
---|---|
first |
項目の左上がスクロールContainerの左上に配置されます。 |
center |
項目の中央がContainerの中央に配置されます。 |
last |
項目の右下がスクロールContainerの右下に配置されます。 |
visible |
項目全体を表示するのに必要な分だけ移動します。 |
componentId
親コンポーネントのIDです。省略すると、SpeakList
コマンドを発行するコンポーネントが使われます。
count
発話する項目の数です。数が1に満たない場合、このコマンドは実行されず、スクロールも発話も行われません。数がContainerの残り項目数を超える場合、開始点から発話できる最大項目数に減らされます。
minimumDwellTime
項目をハイライト(karaoke
状態をtrue
に設定)するミリ秒単位の最小時間です。デフォルトは0です。
start
スクロールして表示し、発話するための、親Container内の最初の子項目の0から始まるインデックスです。負の値は親Containerの最後から数えられます。この例では、リストの最後の3つの項目が発話されます。
{
"type": "SpeakList",
"start": -3,
"count": 3
}
次のアルゴリズムは読み取りの実行方法を概算したものです。
let first = start < 0 ? start + children.length : start;
let last = Math.min(first + count, children.length – 1);
first = Math.max(0, first);
for (let index = first ; index <= last ; index++) {
let child = children[index];
scrollIntoView(child);
if (child.speech) {
child.setState("karaoke", true);
speakChildWithMinimumDwell(child, minimumDwellTime);
child.setState("karaoke", false);
}
else if (minimumDwellTime > 0) {
child.setState("karaoke", true);
waitForTimeout(minimumDwellTime);
child.setState("karaoke", false);
}
}