ポインターのキャンセル
Silktideは、押している間ではなく、押すのをやめた瞬間に動作するボタンやリンクを検出します。 押すのをやめたときに動作するようにすると、間違ったものを押してしまった場合でも、 指を離す前に横へ滑らせて操作を取り消す機会を利用者に与えられます。
これが重要な理由
誰でもときどき間違ったボタンを押しますが、手の震え、手先の器用さの制限、 または視力の低下がある人は、はるかに頻繁に間違って押してしまいます。誰でも使える取り消し方法は、 押し続けたままコントロールの外へドラッグして指を離すことです。これは、 ボタンやリンクが通常、指を離したときに動作するため可能になります。最初に押した瞬間に反応するように 設定されたコントロールでは、この回避方法が使えません。操作が即座に実行され、取り消す方法がなくなるためです。 フォームの送信ボタンや削除ボタンでは、ちょっとした指のずれが取り返しのつかないミスになります。
これはの達成基準2.5.2(ポインターのキャンセル)であり、 の要件です。最も基本的な適合レベルの一部にあたります。
修正方法
mousedown、pointerdown、またはtouchstartではなく、指を離したときに発生するclickイベントから操作を開始します。- コントロールが実際に最初に押した瞬間に反応する必要がある場合(音楽アプリのピアノの鍵盤など)は、 コントロールの外で指を離したときに操作を元に戻すか中止する、または元に戻す機能を提供します。
- 問題として報告されたリスナーが実際には操作を開始していない場合(押下状態の視覚効果を追加しているだけなど)は、 このできます。
// 問題: 押した瞬間に実行され、キャンセルできない
button.addEventListener('mousedown', submitForm);
// 修正: 指を離したときに実行されるため、指を離す前にドラッグしてキャンセルできる
button.addEventListener('click', submitForm);
Silktideによるテスト方法
- 実際のブラウザーで各ページを読み込み、登録されるイベントリスナーを記録します。
- 押している間に発生するイベント、
mousedown、pointerdown、touchstartのリスナーを探します。 - 指を離したときに通常アクティベートされるコントロール(ボタン、リンク、送信またはリセット用の入力要素、
または
button、link、menuitem、tab、switchなどのロールを持つ要素)に リスナーが設定されている場合に報告します。 - 特定のコントロールに設定されていないページ全体のリスナーは除外します。通常、これらはアクティベーションではなく、 スクロールやドラッグ&ドロップの処理に使用されます。
- Silktideはリスナーのコードが何を行うか判断できないため、指摘は確認済みの失敗として数えるのではなく、 確認のために報告されます。
トラブルシューティング
リスナーが何もアクティベートしない
押している間に発生するイベントのリスナーは、押下状態のスタイル、リップルアニメーション、
フォーカス管理など、害のない効果に使用されることがよくあります。実際の操作はclickで実行されます。
この場合、達成基準を満たしているため、指摘を承認してください。
コントロールがスライダーまたはドラッグハンドルである
スライダー、ドラッグハンドル、その他の同様のウィジェットでは、最初に押した瞬間を正当に追跡します。 WCAGでは、こうした操作において押している間に発生するイベントを不可欠なものとして扱います。指摘を承認してください。