Swiper JS - Enter 按钮在缩略图上没有任何可访问性
Swiper JS - Enter button doesn't do anything on the thumbnail for accessibility
问题:
当按下缩略图上的回车按钮时,我们在滑动滑块上遇到了辅助功能问题,这不会将所选图像带到主图像区域。
有什么办法可以让我们按回车键改变滑块的主图像吗?
场景:
我们在我们的网站上设置了滑动器 JS - 滑块 (https://swiperjs.com/),该滑块与缩略图完美配合。这意味着单击缩略图,在主图像区域显示特定图像。
但是对于可访问性,我正在尝试添加 "tabindex='0'" 和 "role='button'" 以便我可以通过按制表符来聚焦缩略图(这有效)但是按(回车)按钮不会带来在主图像区域上移所选图像。
请参阅下面的 codepen link 和代码示例,您可以看到您可以通过 tab 键浏览缩略图,但在缩略图上按 Enter 键没有任何作用:
演示代码 link:
https://codepen.io/asifkhanlush/pen/oNjvVpG?editors=1111
代码:
HTML:
<body>
<div class="swiper-container gallery-top">
<div class="swiper-wrapper">
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container">Slide 1</div>
</div>
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container">Slide 2</div>
</div>
....
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
<div class="swiper-container gallery-thumbs">
<div class="swiper-wrapper">
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container" >Slide 1</div>
</div>
<div class="swiper-slide" tabindex="0" role="button">
<div class="swiper-slide-container">Slide 2</div>
</div>
...
</div>
</div>
JS:
var galleryTop = new Swiper('.gallery-top', {
spaceBetween: 10,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
loop: true,
loopedSlides: 4
});
var galleryThumbs = new Swiper('.gallery-thumbs', {
spaceBetween: 10,
centeredSlides: true,
slidesPerView: 'auto',
touchRatio: 0.2,
slideToClickedSlide: true,
loop: true,
loopedSlides: 4
});
galleryTop.controller.control = galleryThumbs;
galleryThumbs.controller.control = galleryTop;
这是 Swiper (https://github.com/nolimits4web/swiper/issues/4324) 中的一个 bug/missing 功能,但我找到了解决方法。
基本上,将 data-slide-index
添加到所有缩略图并向缩略图元素添加一个 keydown 侦听器:
galleryThumbs.$el.on("keydown", (e) => {
if (e.keyCode !== 13 && e.keyCode !== 32) return;
var slideIndex = e.target.dataset.slideIndex;
if (!slideIndex) return;
galleryThumbs.slideTo(slideIndex);
galleryTop.slideTo(slideIndex);
});
这是带有演示的完整代码:https://codesandbox.io/s/swiper-thumbs-gallery-forked-2d1up?file=/index.html。
问题:
当按下缩略图上的回车按钮时,我们在滑动滑块上遇到了辅助功能问题,这不会将所选图像带到主图像区域。 有什么办法可以让我们按回车键改变滑块的主图像吗?
场景:
我们在我们的网站上设置了滑动器 JS - 滑块 (https://swiperjs.com/),该滑块与缩略图完美配合。这意味着单击缩略图,在主图像区域显示特定图像。
但是对于可访问性,我正在尝试添加 "tabindex='0'" 和 "role='button'" 以便我可以通过按制表符来聚焦缩略图(这有效)但是按(回车)按钮不会带来在主图像区域上移所选图像。
请参阅下面的 codepen link 和代码示例,您可以看到您可以通过 tab 键浏览缩略图,但在缩略图上按 Enter 键没有任何作用:
演示代码 link:
https://codepen.io/asifkhanlush/pen/oNjvVpG?editors=1111
代码:
HTML:
<body>
<div class="swiper-container gallery-top">
<div class="swiper-wrapper">
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container">Slide 1</div>
</div>
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container">Slide 2</div>
</div>
....
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
<div class="swiper-container gallery-thumbs">
<div class="swiper-wrapper">
<div tabindex="0" role="button" class="swiper-slide">
<div class="swiper-slide-container" >Slide 1</div>
</div>
<div class="swiper-slide" tabindex="0" role="button">
<div class="swiper-slide-container">Slide 2</div>
</div>
...
</div>
</div>
JS:
var galleryTop = new Swiper('.gallery-top', {
spaceBetween: 10,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
loop: true,
loopedSlides: 4
});
var galleryThumbs = new Swiper('.gallery-thumbs', {
spaceBetween: 10,
centeredSlides: true,
slidesPerView: 'auto',
touchRatio: 0.2,
slideToClickedSlide: true,
loop: true,
loopedSlides: 4
});
galleryTop.controller.control = galleryThumbs;
galleryThumbs.controller.control = galleryTop;
这是 Swiper (https://github.com/nolimits4web/swiper/issues/4324) 中的一个 bug/missing 功能,但我找到了解决方法。
基本上,将 data-slide-index
添加到所有缩略图并向缩略图元素添加一个 keydown 侦听器:
galleryThumbs.$el.on("keydown", (e) => {
if (e.keyCode !== 13 && e.keyCode !== 32) return;
var slideIndex = e.target.dataset.slideIndex;
if (!slideIndex) return;
galleryThumbs.slideTo(slideIndex);
galleryTop.slideTo(slideIndex);
});
这是带有演示的完整代码:https://codesandbox.io/s/swiper-thumbs-gallery-forked-2d1up?file=/index.html。