! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

JavaScript 스프레드시트 응용 프로그램에 접근성 지원 기능을 추가하는 방법 > 블로그 & Tips

본문 바로가기

SpreadJS

블로그 & Tips

JavaScript 스프레드시트 응용 프로그램에 접근성 지원 기능을 추가하는 방법

페이지 정보

작성자 MESCIUS 작성일 2024-05-02 10:23 조회 17회 댓글 0건

본문

 빠른 시작 가이드

 필요한 항목

 SpreadJS, Visual Studio Code

 참조 컨트롤

 SpreadJS – JavaScript 스프레드시트 컴포넌트 Demos |  Documentation

 자습서

 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 클래스의 getAltTextsetAltText 메서드:

    // 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 클래스의 altText 메서드:

    // 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 열거의 altText 옵션:

    // 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 열거의 altText 옵션:

    //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를 다운로드하여 직접 테스트해보세요!

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.