ポインター
pointer(input: PointerInput): Promise<void>
pointer
APIを使用すると、ポインターデバイスとのインタラクションをシミュレートできます。単一のポインターアクションまたはそれらの配列を受け入れます。
type PointerInput = PointerActionInput | Array<PointerActionInput>
主な対象者は
jsdom
環境でjest
を使用してテストを行うユーザーであり、jsdom
にはレイアウトがありません。つまり、ブラウザーとは異なり、要素は特定の場所、レイヤー、サイズに存在しません。
記述したポインターアクションがレイアウトのその位置で可能かどうかを判断しようとはしません。
ポインターアクション
アクションには、プレスと移動の2つのタイプがあります。
ボタンを押すまたは画面にタッチする
ポインターアクションは、押す、離す、またはその両方のキーを定義する場合、プレスアクションです。
pointer({keys: '[MouseLeft]'})
複数のプレスアクション(同じ位置で)を一度に宣言できます。これは内部的に複数のアクションに解決されます。他のプロパティを宣言する必要がない場合は、keys
文字列だけを提供することもできます。
pointer({keys: '[MouseLeft][MouseRight]'})
// or
pointer('[MouseLeft][MouseRight]')
リリースせずにボタンを押すには、ボタン名の末尾に>
を付けます。
以前に押されたボタンをリリースするだけの場合は、タグを/
で始めます。
pointer('[MouseLeft>]') // press the left mouse button
pointer('[/MouseLeft]') // release the left mouse button
どのボタンが利用可能かは、pointerMap
によって異なります。
ポインターを移動する
プレスアクションではないすべてのポインターアクションは、ポインターの移動を表します。
pointerName
プロパティでどのポインターを移動するかを宣言できます。デフォルトはmouse
です。
mouse
ポインター(pointerId: 1
)は常に存在し、位置を持つ唯一のポインターであることにも注意してください。touch
ポインターは画面にタッチしている間のみ存在し、毎回新しいpointerId
を受け取ります。これらのポインターには、プレスアクションの「button」名をpointerName
として使用します。
pointer([
// touch the screen at element1
{keys: '[TouchA>]', target: element1},
// move the touch pointer to element2
{pointerName: 'TouchA', target: element2},
// release the touch pointer at the last position (element2)
{keys: '[/TouchA]'},
])
ポインターの位置
PointerTarget
interface PointerTarget {
target: Element
coords?: PointerCoords
}
PointerTarget
プロパティを使用すると、ドキュメント上のポインターの位置を記述できます。
提供するcoords
は、結果のMouseEvent
にそのまま適用され、省略できます。
target
は、ブラウザーでポインター入力を受け取る要素である必要があります。これは、それらの座標でポインターイベントを受け取ることができる最上位の要素です。
SelectionTarget
interface SelectionTarget {
node?: Node
offset?: number
}
ポインターアクションは、ドキュメント内の選択を変更できます。
ブラウザーでは、すべてのポインター位置がDOM位置に対応します。これはDOMノードとDOMオフセットであり、通常、ポインター位置に最も近い文字に変換されます。
レイアウトのない環境では、すべての文字が同じレイアウト位置にあるため、ポインター位置はポインターのtarget
の最後の子に最も近いと仮定します。
offset
を提供する場合、ポインター位置はtarget.textContent
のoffset
番目の文字に最も近いと仮定します。
node
も提供する場合、node
とoffset
を選択に使用する正確なDOM位置として扱います。
// element: <div><span>foo</span><span>bar</span></div>
// | marking the cursor.
// [ ] marking a selection.
pointer({target: element, offset: 2, keys: '[MouseLeft]'})
// => <div><span>fo|o</span><span>bar</span></div>
pointer([{target: element, offset: 2, keys: '[MouseLeft>]'}, {offset: 5}])
// => <div><span>fo[o</span><span>ba]r</span></div>
pointer({target: element, node: element, offset: 1, keys: '[MouseLeft]'})
// => <div><span>foo</span>|<span>bar</span></div>