JavaScript

JavaScriptでフェードするスライドショーをつくってみる

JavaScriptでフェードするスライドショーをつくってみる
designchips

今回は画像のスライドショーを、jQueryを利用して表現する方法をご紹介します。シンプルに画像のみ自動で切り替わる仕様だけであればCSSとJavaScriptで表現できますので試してみてください。

JavaScriptでフェードするスライドショーをつくる

まずは基本となるHTMLを確認していきましょう。

HTML

サンプルコードとして以下のようなコードをご用意しました。

<section>
	<ul class="slider">
		<li><img src="images/slide_01.jpg"></li>
		<li><img src="images/slide_02.jpg"></li>
		<li><img src="images/slide_03.jpg"></li>
		<li><img src="images/slide_04.jpg"></li>
		<li><img src="images/slide_05.jpg"></li>
	</ul>
</section>

liタグで画像を5枚並べています。

CSS

スライドする画像をliタグ、スライド全体を囲うulタグに以下のようにCSSを記述します。

.slider{
	width: 900px;
	height: 600px;
	position: relative;
	overflow: hidden;
}
.slider>li{
	position: absolute;
	top: 0;
	opacity: 0;
}

ulタグに「.slider」を割り当て、画像を表示するサイズを指定しています。liタグで並べた複数の画像は、position: absolute;で重ねて並べ「opacity:0」で透明にしています。

JavaScript

HTML内のそのままJavaScriptを書き込むか、外部から読み込むかはお好きな方法をお選びください。サンプルはHTML内にJavaScriptを直接記載しています。

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
(function($) {
 
    var fadeInOut = function ($element) {
        var $children = $element.children(),
            current = 0,
            time = 3000,
            speed = '3s';
      
        $children.css({ transition: speed })
                 .eq(current).css({ opacity: '1' });
      
        setInterval(function () {
            $children.eq(current).css({ opacity: '0' });
            current = current === $children.length - 1 ? 0 : current += 1;
            $children.eq(current).css({ opacity: '1' });
        }, time);
    };
 
    fadeInOut($('.slider'));
 
})(jQuery);
</script>

先ほど、スライドショーにしたいulタグに割り当てた「.slider」を20行目の部分で指定しています。また、1枚の画像の表示時間を7行面の「time: 3000」とし3秒間表示、画像ごとの切り替えスピードを8行目の「speed: 3s」で切替はじめから切替終わりまでに3秒かかるように指定。

同じページ内に複数のスライドショーをつくる場合は、少しJavaScript部分を書き換えればOKです!

同じページ内に複数のスライドショーをつくりたい場合

基本となるHTMLは以下のようにしておきます。

HTML

<section>
	<h2>SLIDE01</h2>
    <ul class="slider_a">
		<li><img src="images/slide_01.jpg"></li>
		<li><img src="images/slide_02.jpg"></li>
		<li><img src="images/slide_03.jpg"></li>
		<li><img src="images/slide_04.jpg"></li>
		<li><img src="images/slide_05.jpg"></li>
	</ul>
</section>

<section>
    <h2>SLIDE02</h2>	
    <ul class="slider_b">
		<li><img src="images/slide_06.jpg"></li>
		<li><img src="images/slide_07.jpg"></li>
		<li><img src="images/slide_08.jpg"></li>
		<li><img src="images/slide_09.jpg"></li>
		<li><img src="images/slide_10.jpg"></li>
	</ul>
</section>

sectionを2つ作っていますが、同じsectionに入れても問題ありません。
その中に先程と同じように2つのスライドを作りたいので、ulタグの中に、スライドさせたい画像をliタグで並べています。そしてそれぞれに、別のクラス名を割り当てています。「.slider_a」と「.slider_b」とここではしておきます。

CSS

.slider_a,.slider_b{
	width: 900px;
	height: 600px;
	position: relative;
	overflow: hidden;
}
.slider_a>li,.slider_b>li{
	position: absolute;
	top: 0;
	opacity: 0;
}

JavaScript

21行目と22行目のところを見てもらうとわかりますが、「fadeInOut」を適用したい部分を2つ「.slider_a」と「.slider_b」記載しています。

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
(function($) {
 
    var fadeInOut = function ($element) {
        var $children = $element.children(),
            current = 0,
            time = 3000,
            speed = '3s';
      
        $children.css({ transition: speed })
                 .eq(current).css({ opacity: '1' });
      
        setInterval(function () {
            $children.eq(current).css({ opacity: '0' });
            current = current === $children.length - 1 ? 0 : current += 1;
            $children.eq(current).css({ opacity: '1' });
        }, time);
    };
 
    fadeInOut($('.slider_a')),
	fadeInOut($('.slider_b'));
 
})(jQuery);
</script>

これで、同じページ内に2つのスライドショーを配置することができます。

画像のサイズや場所、切り替えるスピードなどはJavaScriptやCSSを書き換えれば可能ですので、ご自身のサイトに合わせて調整してご利用ください。

当ブログの画像をコピーして利用することはできません。
記事URLをコピーしました