JavaScript 스프레드시트 응용 프로그램에 접근성 지원 기능을 추가하는 방법
페이지 정보
작성자 MESCIUS 작성일 2024-05-02 10:23 조회 17회 댓글 0건본문
관련링크
빠른 시작 가이드 | |
필요한 항목 | |
참조 컨트롤 |
|
자습서 | JavaScript 접근성 지원 - 웹 응용 프로그램이 접근성 표준을 준수하도록 기능을 추가하는 방법을 알아봅니다. 이번 스터디에서는 SpreadJS를 사용하여 JavaScript 스프레드시트 응용 프로그램을 만듭니다. |
앱의 접근성 및 503조 법안은 다양한 국가에서 준수해야 할 요건이며, 응용 프로그램에 접근성 옵션을 포함하는 것이 중요합니다.
JavaScript 스프레드시트인 SpreadJS를 사용하면 스프레드시트 내에서 데이터를 표시할 때 애플리케이션이 규격을 준수하도록 다양한 접근성 옵션을 설정할 수 있습니다.
이 블로그에서는 스프레드시트에서 설정할 수 있는 다양한 접근성 옵션 및 옵션의 기능에 대해 설명합니다.
스크린 리더
SpreadJS는 스크린 리더를 지원합니다.
Windows의 경우 NVDA
Mac의 경우 VoiceOver
이러한 스크린 리더는 기본 텍스트 및 숫자 셀 외에 SpreadJS에서 다양한 유형의 셀에 사용할 수 있습니다.
다음과 같은 셀이 포함됩니다.
버튼 - "셀(셀 참조, 즉 A1)에 (버튼 이름) 버튼이 있음"으로 읽습니다.
체크박스 - "셀(셀 참조, 즉 A1)에 (체크박스 이름) 체크박스가 있음"으로 읽습니다.
링크 - "셀(셀 참조, 즉 A1)에 (링크 이름) 링크가 있음"으로 읽습니다.
접근성 지원
접근성을 추가하기 시작하려면 옵션을 true로 설정해야 합니다.
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss')); spread.options.enableAccessibility = true;
SpreadJS 디자이너에서 설정>일반 창을 사용하여 활성화할 수도 있습니다.
이 옵션을 활성화해도 SpreadJS의 성능에는 영향을 미치지 않습니다.
기존 스프레드시트 탐색 외에 열의 필터와 같이, 헤더의 상황에 맞는 메뉴와 상호 작용할 수도 있습니다.
이 작업은 다음과 같은 코드를 사용하여 키보드 단축키(바로 가기)를 통해 실행할 수 있습니다.
var spread = new GC.Spread.Sheets.Workbook("ss", { sheetCount: 3 }); var sheet = spread.getActiveSheet(); spread.commandManager().register('openColumnContextMenu', function (workbook, options) { var host = workbook.getHost(), sheet = spread.getActiveSheet(); var activeColIndex = sheet.getActiveColumnIndex(); var colHeaderRect = sheet.getCellRect(0, activeColIndex, -1); var pointerEvent = new PointerEvent("contextmenu", { bubbles: true, cancelable: true, view: window, clientX: colHeaderRect.x + colHeaderRect.width / 2 + host.offsetLeft, clientY: colHeaderRect.y + colHeaderRect.height / 2 + host.offsetTop, button: 2 }); host.dispatchEvent(pointerEvent); }, 49, true, true, false, false);//ctrl+shift+1
대체 텍스트
SpreadJS에서는 셀에 대체 텍스트를 사용할 수 있습니다.
이는 장애가 있는 사용자 및 스크린 리더를 사용하여 셀과 상호 작용하는 사용자에 도움이 되는 설명 텍스트입니다.
셀에 대체 텍스트가 설정되면 스크린 리더가 대체 텍스트를 큰 소리로 읽습니다.
대체 텍스트는 셀 값에 해당하는 "{value}" 및 서식이 지정된 셀 값에 해당하는 {formatted}와 같은 자리 표시자 외에 일반 텍스트를 지원합니다.
대체 텍스트는 설정, 조회, 복사, 이동, 수정할 수 있으며 .SSJSON 또는 .SJS 파일 서식을 위해 직렬화 및 역직렬화할 수 있습니다.
대체 텍스트를 설정하는 데는 몇 가지 방법이 있습니다.
Worksheet 클래스의 및 메서드:
// Set and get the alternative text value with the cell value using setAltText and getAltText methods. activeSheet.setAltText(0, 0, "Set alternative text for the cell "); console.log(activeSheet.getAltText(0, 0));
CellRange 클래스의 메서드:
// Set and get the alternative text value of a cell using altText method. activeSheet.getCell(0, 0).altText("Set alternative text for the cell"); var B1= activeSheet.getCell(1, 1).value(1000); B1.altText("Alt Text is the cell value: " + activeSheet.getCell(1, 1).value()); console.log(activeSheet.getCell(0, 0).altText()); console.log(activeSheet.getCell(1, 1).altText()); activeSheet.setValue(0, 3, new Date(2013, 3, 1)); activeSheet.getCell(0, 3).formatter('d-mmm;@'); console.log("Cell formatter of cell[0,3] is :" + activeSheet.getCell(0, 3).formatter()); console.log("Formatted value of cell[0,3] is :" + activeSheet.getCell(0, 3).value());
StorageType 열거의 옵션:
// Use StorageType enumeration to get the alternative text value of cell. activeSheet.getCell(0, 0).altText("Alternative text for the cell "); activeSheet.clear(0, 0, 3, 3, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.altText);
CopyToOptions 열거의 옵션:
//Use CopyToOption enumeration to copy the alternative text value of cell. activeSheet.getCell(0, 0).altText("Alternative text for the cell "); activeSheet.copyTo(0, 0, 1, 1, 2, 2, GC.Spread.Sheets.CopyToOptions.altText);
마우스 오른쪽 단추로 셀을 클릭했을 때 표시되는 UI를 사용하여 altText를 설정할 수도 있습니다.
또한 altText 기능을 사용하면, 셀에 대한 사용자 정의 대체 텍스트를 만들 수도 있습니다.
이는 셀 내의 사용자 정의 글꼴 및 아이콘에 특히 유용합니다.
특정 셀에 대해 스크린 리더가 크게 읽는 내용을 직접 제어할 수 있습니다.
셀 외에 그림, 셰이프, 차트의 사용자 정의 대체 텍스트도 설정할 수 있습니다.
이 작업은 다음 클래스의 "alt" 메서드를 사용하여 실행할 수 있습니다.
Picture
FloatingObject
ConnectorShape
GroupShape
Shape
Chart
이는 다음 코드를 사용하여 완료할 수 있습니다.
$(document).ready(function () { // initializing Spread var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 2 }); // Get the activesheet var sheet = spread.getSheet(0); //enable accessibility spread.options.enableAccessibility = true; spread.suspendPaint(); //set focus spread.focus(); //change the commands related to Tab key, Shift key with Tab key 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); //set default row height and column width sheet.defaults.rowHeight = 50; sheet.defaults.colWidth = 150; //set default horizontal alignment and vertical alignment 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); //bind data source sheet.setDataSource(dataSource); // get another sheet 1 var sheet = spread.getSheet(1); //prepare data for chart 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)); } } //add columnClustered chart 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); // add mango picture var p1 = sheet.pictures.add("p1", "mango.jpg", 500, 50, 200, 200); p1.alt("This is a mango image"); p1.borderColor("rgba(20, 119, 167, 1)"); p1.borderWidth(2); p1.borderStyle("solid"); // add cloud shape var sp1 = sheet.shapes.add("sp1", GC.Spread.Sheets.Shapes.AutoShapeType.cloud, 250, 50, 200, 200); sp1.alt("This is a cloud shape"); spread.resumePaint(); //bind events to set alternative text 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(); } }); });
이는 SpreadJS에서 사용할 수 있는 접근성 옵션 중 일부에 불과합니다!
우리는 앱이 규정을 준수할 수 있도록 지속적으로 고객과 협력하여 더 많은 접근성 기능을 추가하고 있습니다.
SpreadJS를 사용하여 직접 확인해 보시길 바랍니다.
지금 바로 SpreadJS를 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.