pixijs-accessibility
PixiJS v8 アプリにスクリーンリーダーやキーボードナビゲーションを追加する際に使用するスキルです。`AccessibilitySystem` のオプション(`enabledByDefault`、`debug`、`activateOnTab`、`deactivateOnMouseMove`)、コンテナごとのアクセシビリティプロパティ、シャドウDOM オーバーレイ、モバイルのタッチフック起動などをカバーします。アクセシビリティ・a11y・スクリーンリーダー・ARIA・キーボードナビゲーション・タブ順序・`AccessibilitySystem`・`accessibleTitle`・`accessibleHint`・`tabIndex`・`accessibleChildren` といったキーワードに反応します。
description の原文を見る
Use this skill when adding screen reader and keyboard navigation to PixiJS v8 apps. Covers AccessibilitySystem options (enabledByDefault, debug, activateOnTab, deactivateOnMouseMove), per-container accessibility properties, shadow DOM overlay, mobile touch-hook activation. Triggers on: accessibility, a11y, screen reader, ARIA, keyboard navigation, tab order, AccessibilitySystem, accessibleTitle, accessibleHint, tabIndex, accessibleChildren.
SKILL.md 本文
PixiJSの AccessibilitySystem を通じてスクリーンリーダーとキーボードナビゲーションを有効にします。このシステムは、アクセシブルなコンテナーの上に配置された目に見えない shadow DOM オーバーレイを作成し、支援技術がそれらを見つけて起動できるようにします。
クイックスタート
const button = new Sprite(await Assets.load("button.png"));
button.accessible = true;
button.accessibleTitle = "Play game";
button.accessibleHint = "Starts a new game session";
button.eventMode = "static";
button.tabIndex = 0;
app.stage.addChild(button);
app.renderer.accessibility.setAccessibilityEnabled(true);
button.on("pointertap", () => startGame());
関連スキル: pixijs-events (ポインター/タップハンドラー)、pixijs-scene-dom-container (canvas上のHTML要素)、pixijs-application (初期化オプション)。
重要なポイント:
- デフォルトではユーザーがTabキーを押した後にのみシステムが起動します。Application初期化時に
enabledByDefault: trueを設定して即座に起動させてください。 - モバイルではシステムは隠れたタッチフックを作成します。スクリーンリーダーのフォーカスはセッション全体のアクセシビリティを有効にします。
- AccessibilitySystemはメインスレッドを必要とします。Web Workerでは利用できません。
コアパターン
コンテナーのアクセシビリティプロパティ
import { Container, Sprite } from "pixi.js";
const container = new Container();
container.accessible = true;
container.accessibleTitle = "Navigation menu";
container.accessibleHint = "Contains links to other pages";
container.eventMode = "static"; // required for custom tabIndex to apply
container.tabIndex = 0;
container.accessibleType = "div"; // defaults to 'button'
const sprite = new Sprite();
sprite.accessible = true;
sprite.accessibleTitle = "Close dialog";
sprite.accessibleText = "X"; // text content of the shadow div
sprite.eventMode = "static";
sprite.tabIndex = 1;
任意のコンテナーで利用可能なプロパティ:
accessible(boolean) - アクセシブルなオーバーレイ div を有効化accessibleTitle(string) - shadow div のtitle属性を設定accessibleHint(string) -aria-label属性を設定accessibleText(string) - shadow div の内部テキストコンテンツを設定accessibleType(string) - shadow 要素のHTMLタグ、デフォルトは'button'tabIndex(number) - キーボードナビゲーション用のタブ順序 (interactiveが true またはeventModeが'static'もしくは'dynamic'の場合にのみ適用)accessibleChildren(boolean、デフォルトtrue) -falseの場合、子コンテナーのアクセシビリティを防止accessiblePointerEvents(string) - shadow div 上の CSSpointer-events値
カスタムタブ順序
各アクセシブルコンテナーに tabIndex を指定して、支援技術が走査する順序を制御します。高い数値は後に来ます。同じ数値はシーングラフの順序にフォールバックします。
menuButton.accessible = true;
menuButton.eventMode = "static";
menuButton.tabIndex = 1;
playButton.accessible = true;
playButton.eventMode = "static";
playButton.tabIndex = 2;
settingsButton.accessible = true;
settingsButton.eventMode = "static";
settingsButton.tabIndex = 3;
tabIndex はコンテナーが interactive な場合 (eventMode が 'static' または 'dynamic') にのみ shadow div に転送されます。そうでない場合、システムは div の tabIndex を 0 に制限し、設定した順序は無視されます。
プログラマティック制御
import { Application } from "pixi.js";
const app = new Application();
await app.init({ width: 800, height: 600 });
// 実行時にアクセシビリティを有効化
app.renderer.accessibility.setAccessibilityEnabled(true);
// 現在の状態を確認
console.log(app.renderer.accessibility.isActive);
console.log(app.renderer.accessibility.isMobileAccessibility);
// 完全な初期化オプション:
await app.init({
accessibilityOptions: {
enabledByDefault: true, // 即座に起動 (デフォルト: false)
debug: true, // オーバーレイ div を表示 (デフォルト: false)
activateOnTab: true, // Tabキーがシステムを起動 (デフォルト: true)
deactivateOnMouseMove: false, // マウス移動時もアクティブなままにする (デフォルト: true)
},
});
このシステムは Application 作成前に静的なデフォルトで設定することもできます:
import { AccessibilitySystem, Application } from "pixi.js";
AccessibilitySystem.defaultOptions.enabledByDefault = true;
AccessibilitySystem.defaultOptions.deactivateOnMouseMove = false;
const app = new Application();
await app.init();
アクセシブルなインタラクションの処理
import { Sprite } from "pixi.js";
const button = new Sprite();
button.eventMode = "static";
button.accessible = true;
button.accessibleTitle = "Submit form";
button.tabIndex = 0;
// スクリーンリーダーは shadow DOM 要素経由でクリック/タップイベントをトリガー
button.on("pointertap", () => {
submitForm();
});
アクセシビリティがアクティブな場合、ユーザーが shadow div を起動すると (Enter/Spaceキーまたはスクリーンリーダーアクション経由)、システムは対応するコンテナーに click、pointertap、tap FederatedEvents をディスパッチします。shadow div のフォーカスは mouseover をディスパッチし、フォーカス解除は mouseout をディスパッチします。完全なキーボード + ポインターサポートのため、eventMode と accessible の両方を設定する必要があります。
よくある間違い
[MEDIUM] Tabキー押下なしでアクセシビリティがアクティブになると想定する
AccessibilitySystem は、ユーザーが Tab キーを押す (またはモバイルではタッチフックにフォーカス) までは DOM オーバーレイを作成しません。アプリケーションがアクセシビリティを即座に必要とする場合:
const app = new Application();
await app.init({
accessibilityOptions: {
enabledByDefault: true,
},
});
または実行時に:
app.renderer.accessibility.setAccessibilityEnabled(true);
どちらもない場合、自動化されたアクセシビリティテストツールはオーバーレイ要素を見つけられません。
[MEDIUM] accessibleTitle なしで accessible を設定
間違い:
const sprite = new Sprite();
sprite.accessible = true;
// title や hint が設定されていない
正しい:
const sprite = new Sprite();
sprite.accessible = true;
sprite.accessibleTitle = "Play button";
sprite.accessibleHint = "Click to start the game";
accessible = true だが accessibleTitle または accessibleHint がないコンテナーは、"container {tabIndex}" というフォールバックタイトルが付きます。スクリーンリーダーはこのジェネリックなラベルを役立つコンテキストなしで読み上げます。常に最低でも accessibleTitle を提供してください。
[MEDIUM] マウス移動時にアクセシビリティが無効化される
デフォルトでは、deactivateOnMouseMove は true です。Tab起動後のマウス移動はオーバーレイを無効化します。これは意図的です (キーボードのみユーザーがマウスを使用しないと想定)が、マウスでのテストを悔しくします。
await app.init({
accessibilityOptions: {
deactivateOnMouseMove: false,
},
});
[MEDIUM] カスタムビルドでアクセシビリティ拡張をインポートしない
skipExtensionImports: true をカスタムビルドで使用する場合、アクセシビリティ拡張は自動的に登録されません。明示的にインポートする必要があります:
import "pixi.js/accessibility";
import { Application } from "pixi.js";
const app = new Application();
await app.init({ skipExtensionImports: true });
このインポートがないと、app.renderer.accessibility は undefined となり、shadow DOM レイヤーは作成されません。
API リファレンス
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- pixijs
- リポジトリ
- pixijs/pixijs-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/pixijs/pixijs-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。