アクセシビリティに配慮した軽量・高機能スライダー Splide

らら
らら
アクセシビリティに配慮した軽量・高機能スライダー Splide

はじめに

最近SwiperやslickでLighthouseのエラーになるので、毎回ソース内をじかにさわってたりするけど・・

バージョンアップとかで・・・とか・・・

なので、ぐぐってみるとSplideというのを発見・・・

Splideとは

TypeScriptで記述され、JQuery使用もなしで動作します。

アクセシビリティに配慮した軽量・高機能スライダーっていうのが特徴です。

主な機能的には、slickとかに比べて問題ない感じでした。

https://ja.splidejs.com/

当然。。スライダーなので完全な対応は難しいとこはあるかと思いますが・・

下記を読んで検討するのもよいかと・・

https://ja.splidejs.com/guides/accessibility/

使い方は・・

こちらは日本語で対応していますので・・

https://ja.splidejs.com/guides/getting-started/

設置方法は特に他とかわらないですね。


<link rel="stylesheet" href="path-to-the-file/splide.min.css">
<script src="path-to-the-file/splide.min.js"></script>
<script>
  document.addEventListener( 'DOMContentLoaded', function() {
    var splide = new Splide( '.splide' );
    splide.mount();
  } );
</script>
<section class="splide" aria-label="Splideの基本的なHTML">
  <div class="splide__track">
		<ul class="splide__list">
			<li class="splide__slide">Slide 01</li>
			<li class="splide__slide">Slide 02</li>
			<li class="splide__slide">Slide 03</li>
		</ul>
  </div>
</section>

1画像づつ、自動スクロールを一致させる。perPageだけだと、perPage分スライドしてしまいます。

focus: 0で1枚ずつスライドしてくれます。

focus: "center"にすると真ん中、中心になります。


<!DOCTYPE html>
<html lang="ja" >
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.4/dist/js/splide.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.4/dist/css/splide.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/@splidejs/splide-extension-auto-scroll@0.5.3/dist/js/splide-extension-auto-scroll.min.js"></script>
<style>
.splide__slide img {
	height: auto;
	width: 100%;
}
</style>
</head>
<script>
document.addEventListener( 'DOMContentLoaded', function () {
	var splide = new Splide(".splide", {
		autoplay: true,
		type:'loop',
		perPage: 3,
		focus: 0,
		interval: 2000,
		pauseOnHover: false,
		pauseOnFocus: false,
		speed: 1000
	})
	splide.mount(window.splide.Extensions );
});
</script>
<body>
<div class="splide">
	<div class="splide__slider">
		<div class="splide__track">
			<ul class="splide__list">
				<li class="splide__slide">
					<img src="./win7/1.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/2.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/3.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/4.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/5.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/6.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/7.jpg">
				</li>
				<li class="splide__slide">
					<img src="./win7/8.jpg">
				</li>
			</ul>
		</div>
  </div>
<!--
  <button class="splide__toggle" type="button">
	  <span class="splide__toggle__play">Play</span>
	  <span class="splide__toggle__pause">Pause</span>
  </button>
-->
</div>
</body>
</html>

一般的なやつ・・


<!DOCTYPE html>
<html lang="ja" >
<head>
<meta charset="UTF-8">
<title>テスト</title>
<script src="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.3/dist/js/splide.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.3/dist/css/splide.min.css" rel="stylesheet">
<style>
.splide {
	width: 700px;
}
.splide__slide img {
	height: auto;
	width: 100%;
}
</style>
</head>
<body>
<div class="splide">
	<div class="splide__slider">
		<div class="splide__track">
			<ul class="splide__list">
				<li class="splide__slide"><img src="./win7/1.jpg"></li>
				<li class="splide__slide"><img src="./win7/2.jpg"></li>
				<li class="splide__slide"><img src="./win7/3.jpg"></li>
				<li class="splide__slide"><img src="./win7/4.jpg"></li>
				<li class="splide__slide"><img src="./win7/5.jpg"></li>
				<li class="splide__slide"><img src="./win7/6.jpg"></li>
				<li class="splide__slide"><img src="./win7/7.jpg"></li>
				<li class="splide__slide"><img src="./win7/8.jpg"></li>
			</ul>
		</div>
  </div>
<!--
  <button class="splide__toggle" type="button">
	  <span class="splide__toggle__play">Play</span>
	  <span class="splide__toggle__pause">Pause</span>
  </button>
-->
</div>
<script>
document.addEventListener( 'DOMContentLoaded', function () {
	var splide = new Splide(".splide", {
		autoplay: true,
		type:'fade',
		rewind:true,
		interval: 1000,
		pauseOnHover: false,
		pauseOnFocus: false,
		autoplay: true,
		speed: 1000
	})
	splide.mount();
});
</script>
</body>
</html>

PCによって自動スライダーしない不具合がある感じ・・・ver 4.1.4

下記の対応で動く・・・けど・・・


document.addEventListener( 'DOMContentLoaded', function () {
	var splide = new Splide(".splide", {
		autoplay: true,
		type:'fade',
		rewind:true,
		interval: 1000,
		pauseOnHover: false,
		pauseOnFocus: false,
		autoplay: true,
		speed: 1000
	})
	splide.mount();
	var Autoplay = splide.Components.Autoplay;
	Autoplay.play();
});

さいごに

最近、一般企業サイトでも、「障害を理由とする差別の解消の推進に関する法律」でJIS X 8341-3に対応しているものが増えましたね・・

スライダーに停止ボタンがあったりと・・ariaの記述があったりと・・・

関連

WebアクセシビリティJIS X 8341-3

記事
https://www.omakase.net/blog/2023/04/webjis-x-8341-3.html

アクセシビリティに配慮したクロスブラウザHTML5メディアプレーヤー Able Player

記事
https://www.omakase.net/blog/2023/04/html5-able-player.html

関連記事