SpreadJSは、スクリーンリーダーなどのアクセシビリティサポートを提供します。アプリケーションの開発者はアクセシビリティサポートを使用して、エンドユーザーエクスペリエンスをより高めることができます。
Webページのテキストコンテンツには、次の方法でアクセスできます。
スクリーンリーダーで読み上げられるテキストをより意味のあるものにするために、さまざまなケースでさまざまなテキストが使用されます。
| ケース | スクリーンリーダーで読み上げられるテキスト |
|---|---|
| セル(0、1)は、Tabキーを押すとアクティブセルになり、その値は「名前」です。 | セル(0、1)の値は「名前」です。 |
| マウスがビューポート領域のセル(0、1)に入り、その値は「名前」です。 | セル(0、1)の値は「名前」です。 |
| マウスが列ヘッダ領域のセル(0、1)に入り、その値は「名前」です。 | 列ヘッダのセル(0、1)の値は「名前」です。 |
| マウスが行ヘッダ領域にセル(1、0)を入力し、その値は「名前」です。 | 行ヘッダのセル(1、0)の値は「名前」です。 |
| マウスがタブストリップのサイズ変更バーに入ります。 | タブストリップのリサイズ |
| マウスがタブストリップの最初の領域に入ります。 | タブストリップの先頭 |
| マウスがタブストリップの前の矢印領域に入ります。 | 前への矢印ボタン |
| マウスがタブストリップの次の矢印領域に入ります。 | 次への矢印ボタン |
| マウスがタブストリップの最後の領域に入ります。 | タブストリップの最後 |
| マウスがタブストリップの前のボタン領域に入ります。 | 前へのボタン |
| マウスがタブストリップの次のボタン領域に入ります。 | 次へのボタン |
| マウスがタブストリップのシートタブ領域に入り、その名前は「Sheet1」です。 | シートタブ「Sheet1」 |
| マウスがタブストリップの新しいシート領域に入ります。 | 新しいシート |
| マウスがタブストリップの空白の領域に入ります。 | タブストリップのブランク領域 |
| マウスが水平スクロールバーの左ボタン領域に入ります。 | スクロールバーの左ボタン |
| マウスが垂直スクロールバーの上部のボタン領域に入ります。 | スクロールバーの上ボタン |
| マウスがスクロールバーのサムボタン領域に入ります。 | スクロールバーのサム |
| マウスが水平スクロールバーの右ボタン領域に入ります。 | スクロールバーの右ボタン |
| マウスは、垂直スクロールバーの下部のボタン領域に入ります。 | スクロールバーの下ボタン |
| サンプルページがアクティブタブにあり、アクティブセルはCell(0、1)で、その値は「名前」です。 | セル(0、1)の値は「名前」です。 |
アクセシビリティサポートは、Windowsナレーター、Windows用のNVDA(NonVisual Desktop Access)、Mac OS X用のVoiceOverなどの画面読み上げアプリケーションで使用できます。「Tabキーを押す」、「マウスホバー」、および「アクティブなタブのページ」などの機能は、使用するスクリーンリーダーとブラウザの種類によって動作が異なります。
次の表は、さまざまなブラウザでスクリーンリーダーの結果を示します。
| スクリーンリーダー | ブラウザ |
Tabキーを押す |
マウスホバー | アクティブなタブでのページ |
| Windows用のNVDA | Chrome | サポートされる | サポートされる | サポートされる |
| Windows用のNVDA | Firefox | サポートされる | サポートされる | サポートされていない |
| Windows用のNVDA | Chromium Edge | サポートされる | サポートされる | サポートされていない |
| Windows用のNVDA | Edge | サポートされていない | サポートされていない | サポートされていない |
| Windows用のNVDA | IE | サポートされていない | サポートされていない | サポートされていない |
| Windowsナレーター | Chrome | サポートされる | サポートされる | サポートされていない |
| Windowsナレーター | Firefox | サポートされる | サポートされる | サポートされていない |
| Windowsナレーター | Chromium Edge | サポートされる | サポートされる | サポートされていない |
| Windowsナレーター | Edge | サポートされる | サポートされていない | サポートされていない |
| Windowsナレーター | IE | サポートされる | サポートされていない | サポートされていない |
| Mac OS X用のVoiceOver | Chrome | 制限付きでサポートされる | 制限付きでサポートされる | サポートされていない |
| Mac OS X用のVoiceOver | Safari | 制限付きでサポートされる | 制限付きでサポートされる | サポートされていない |
アクセシビリティサポートを有効にする、enableAccessibilityプロパティをTrueに設定します。
次のサンプルコードは、アクセシビリティサポートを有効にします。
| JavaScript |
コードのコピー
|
|---|---|
spread.options.enableAccessibility = true;
|
|
SpreadJSは、フローティングオブジェクト、画像、チャート、図形などのグラフィックコンテンツに対して、適切な代替テキストを提供しません。ただし、Picture、FloatingObject、ConnectorShape、GroupShape、Shape、およびChartクラスのaltメソッドを使用して、アクセシビリティサポートのために代替テキストを提供できます。
次のサンプルコードは、画像、図形、チャートの代替テキストを設定します。
| JavaScript |
コードのコピー
|
|---|---|
<script>
$(document).ready(function () {
// Spreadを初期化します。
var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 2 });
// アクティブシートを取得します。
var sheet = spread.getSheet(0);
// アクセシビリティを有効にします。
spread.options.enableAccessibility = true;
spread.suspendPaint();
// フォーカスを設定します。
spread.focus();
// Tabキー、Shift+Tabキーに関連するコマンドを変更します。
var commands = spread.commandManager();
// TAB
commands.register("moveToNextCellThenControl", GC.Spread.Sheets.Commands.moveToNextCellThenControl, GC.Spread.Commands.Key.tab, false, false, false, false);
// SHIFT+TAB
commands.register("moveToPreviousCellThenControl", GC.Spread.Sheets.Commands.moveToPreviousCellThenControl, GC.Spread.Commands.Key.tab, false, true, false, false);
// デフォルトの行の高さと列の幅を設定します。
sheet.defaults.rowHeight = 50;
sheet.defaults.colWidth = 150;
// デフォルトの水平方向と垂直方向の配置を設定します。
var defaultStyle = sheet.getDefaultStyle();
defaultStyle.hAlign = GC.Spread.Sheets.HorizontalAlign.center;
defaultStyle.vAlign = GC.Spread.Sheets.VerticalAlign.center;
defaultStyle.rowHeight = 50;
defaultStyle.colWidth = 150;
sheet.setDefaultStyle(defaultStyle);
// データソースをバインドします。
sheet.setDataSource(dataSource);
// Sheet1を取得します。
var sheet = spread.getSheet(1);
// チャートのデータを準備します。
sheet.setValue(0, 1, "Q1");
sheet.setValue(0, 2, "Q2");
sheet.setValue(0, 3, "Q3");
sheet.setValue(1, 0, "Mobile Phones");
sheet.setValue(2, 0, "Laptops");
sheet.setValue(3, 0, "Tablets");
for (var r = 1; r <= 3; r++) {
for (var c = 1; c <= 3; c++) {
sheet.setValue(r, c, parseInt(Math.random() * 100));
}
}
// columnClusteredチャートを追加します。
var c1 = chart_columnClustered = sheet.charts.add('chart_columnClustered', GC.Spread.Sheets.Charts.ChartType.columnClustered, 50, 300, 300, 300, "A1:D4");
c1.alt("This is a column chart");
var chartArea = c1.chartArea();
chartArea.border.color = "rgba(20, 119, 167, 1)";
chartArea.border.width = 2;
c1.chartArea(chartArea);
// 画像を追加します。
var p1 = sheet.pictures.add("p1", "mango.jpg", 500, 50, 200, 200);
p1.alt("これはマンゴーの画像です。");
p1.borderColor("rgba(20, 119, 167, 1)");
p1.borderWidth(2);
p1.borderStyle("solid");
// 雲のシェイプを追加します。
var sp1 = sheet.shapes.add("sp1", GC.Spread.Sheets.Shapes.AutoShapeType.cloud, 250, 50, 200, 200);
sp1.alt("これは雲のシェイプです。");
spread.resumePaint();
// イベントをバインドして代替テキストを設定します。
function setAltText(collection, altText) {
var success = false;
collection.forEach(function (obj) {
if (obj.isSelected()) {
obj.alt(altText);
success = true;
}
});
return success;
}
var alternativeText = document.getElementById("alternativeText");
document.getElementById("setAlternativeText").addEventListener("click", function () {
var altText = alternativeText.value;
var success = setAltText(sheet.pictures.all(), altText);
if (success) {
return;
}
success = setAltText(sheet.charts.all(), altText);
if (success) {
return;
}
setAltText(sheet.shapes.all(), altText);
});
spread.bind(GC.Spread.Sheets.Events.PictureChanged, function (event, args) {
if (args.propertyName === "isSelected" && args.picture.isSelected()) {
alternativeText.value = args.picture.alt();
}
});
spread.bind(GC.Spread.Sheets.Events.FloatingObjectChanged, function (event, args) {
var floatingObject = args.floatingObject;
if (floatingObject && floatingObject instanceof GC.Spread.Sheets.Charts.Chart) {
if (args.propertyName === "isSelected" && floatingObject.isSelected()) {
alternativeText.value = floatingObject.alt();
}
}
});
spread.bind(GC.Spread.Sheets.Events.ShapeChanged, function (event, args) {
if (args.propertyName === "isSelected" && args.shape.isSelected()) {
alternativeText.value = args.shape.alt();
}
});
});
</script>
|
|