From b2516014b293bfc2cfc02ea07f5e888973787295 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Wed, 14 Sep 2022 12:10:18 +0300 Subject: [PATCH] fix(a11y): don't handle focus on pointer events fixes #5962 fixes #5814 fixes #5524 fixes #5490 fixes #5437 --- src/modules/a11y/a11y.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/modules/a11y/a11y.js b/src/modules/a11y/a11y.js index 65cb443e0..3adf078b9 100644 --- a/src/modules/a11y/a11y.js +++ b/src/modules/a11y/a11y.js @@ -20,6 +20,10 @@ export default function A11y({ swiper, extendParams, on }) { }, }); + swiper.a11y = { + clicked: false, + }; + let liveRegion = null; function notify(message) { @@ -161,8 +165,15 @@ export default function A11y({ swiper, extendParams, on }) { addElLabel($el, message); addElControls($el, wrapperId); }; + const handlePointerDown = () => { + swiper.a11y.clicked = true; + }; + const handlePointerUp = () => { + swiper.a11y.clicked = false; + }; const handleFocus = (e) => { + if (swiper.a11y.clicked) return; const slideEl = e.target.closest(`.${swiper.params.slideClass}`); if (!slideEl || !swiper.slides.includes(slideEl)) return; const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; @@ -258,6 +269,8 @@ export default function A11y({ swiper, extendParams, on }) { // Tab focus swiper.$el.on('focus', handleFocus, true); + swiper.$el.on('pointerdown', handlePointerDown, true); + swiper.$el.on('pointerup', handlePointerUp, true); }; function destroy() { if (liveRegion && liveRegion.length > 0) liveRegion.remove(); @@ -288,6 +301,8 @@ export default function A11y({ swiper, extendParams, on }) { // Tab focus swiper.$el.off('focus', handleFocus, true); + swiper.$el.off('pointerdown', handlePointerDown, true); + swiper.$el.off('pointerup', handlePointerUp, true); } on('beforeInit', () => {