From 128827156b0f125a5f6ecf1409add4146fa3c989 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Fri, 28 Jan 2022 12:58:29 +0300 Subject: [PATCH] feat(a11y): automatically switch slides on focus (`Tab`) in inactive slides fixes #3149 --- src/modules/a11y/a11y.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/modules/a11y/a11y.js b/src/modules/a11y/a11y.js index d87832a76..0a211e5e3 100644 --- a/src/modules/a11y/a11y.js +++ b/src/modules/a11y/a11y.js @@ -161,6 +161,18 @@ export default function A11y({ swiper, extendParams, on }) { addElControls($el, wrapperId); }; + const handleFocus = (e) => { + const slideEl = e.target.closest(`.${swiper.params.slideClass}`); + if (!slideEl || !swiper.slides.includes(slideEl)) return; + const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; + const isVisible = + swiper.params.watchSlidesProgress && + swiper.visibleSlides && + swiper.visibleSlides.includes(slideEl); + if (isActive || isVisible) return; + swiper.slideTo(swiper.slides.indexOf(slideEl), 0); + }; + function init() { const params = swiper.params.a11y; @@ -228,6 +240,9 @@ export default function A11y({ swiper, extendParams, on }) { onEnterOrSpaceKey, ); } + + // Tab focus + swiper.$el.on('focus', handleFocus, true); } function destroy() { if (liveRegion && liveRegion.length > 0) liveRegion.remove(); @@ -255,6 +270,9 @@ export default function A11y({ swiper, extendParams, on }) { onEnterOrSpaceKey, ); } + + // Tab focus + swiper.$el.off('focus', handleFocus, true); } on('beforeInit', () => {