연사소개 Anuradha Kumari
Mediaocean에서 Developement Sepcialist로 일하고 있다
자바스크립트와 접근성에 대한 관심이 많다
const buttonEle = document.getElementById("acc-button");
buttonEle.addEventListener("click", () => {
// 버튼을 클릭할 때 발생해야 하는 작업에 대한 코드
}
);
buttonEle.addEventListener("keydown", (event) => {
if (event.key === ' ' || event.key === 'Enter') {
// 버튼을 눌렀을 때 발생해야 하는 작업에 대한 코드
// 스페이스바 키를 눌러도 콘텐츠가 스크롤되지 않도록 기본값 방지
event.preventDefault();
}
});
preventDefault()
를 이용해서 차단함const customBtn = document.getElementById("custom-button");
customBtn.addEventListener('keyup', event =>{
if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter'){
// 실행할 코드
}
});
마우스업
과 마우스다운
대신 키업
또는 키다운
을 사용해야함"아웃라인(윤곽)과 키보드 사용자와의 관계는 커서와 마우스 사용자와의 관계와 같다"
자바스크립트를 이용해 접근성을 높일 수 있는 사례를 알아보자
HTML
<section class="accessible-modal">
<button class="open-modal-button">Click here to open modal</button>
<button class="button-other">Some other button</button>
<div class="modal" role="dialog" aria-modal="true">
<div class="modal-content">
<button class="close-modal-button" aria-label="Close modal">
<i class="fa fa-close fa-lg" aria-hidden="true"></i>
</button>
<h1>Hello, the modal has opened!</h1>
<button class="submit-modal-button">
Submit
</button>
</div>
</div>
</section>
JavaScript
const modal = document.querySelector(".accessible-modal .modal");
const openModalButton = document.querySelector(
".accessible-modal .open-modal-button"
);
const closeModalButton = document.querySelector(
".accessible-modal .close-modal-button"
);
const submitButton = document.querySelector(
".accessible-modal .submit-modal-button"
);
let previousActiveElement;
const toggleModal = () => {
modal.classList.toggle("show-modal");
};
const toggleModelWithFocusRestored = () => {
toggleModal();
previousActiveElement.focus();
};
const getAllFocusableElements = context =>
Array.from(context.querySelectorAll("button"));
const getFocusableElement = (context = "document") => {
let focusable = getAllFocusableElements(context);
return focusable[0];
};
//모달 클릭시 일어나는 일
openModalButton.addEventListener("click", () => {
previousActiveElement = document.activeElement;
toggleModal();
getFocusableElement(modal).focus();
});
모달을 열 때
previousActiveElement = document.activeElement;
모달을 닫을 때
toggleModelWithFocusRestored
로 모달을 토글링 하기toggleModal()
previousActiveElement.focus()
위의것과 별개로, 다운키를 하더라도 모달 내부에 포커스가 트래핑되게 하기
@media (prefers-reduced-motion: no-preference) {
.animate-balls {
animation: jump infinite 2s linear;
animation-iteration-count: infinite;
}
}
const animationClassName = matchMedia("(prefers-reduced-motion)").matches
? ""
: "animate-balls";
결론
웹 개발자는 항상 웹 접근성에 대해 고민해야한다.
하지만 정작 나는 웹 접근성에 대해 깊이 고민해본적이 없다. 기껏 적용한것은 '시맨틱 태그를 지키자' 정도?
하지만 이번 컨퍼런스를 보며 접근성에 대해 보다 정확한 의미를 알게되었다.
내가 만드는 서비스에 접근성 문제때문에 사용하지 못하는 유저가 생기지 않도록 노력해야겠다.