学んだこと、日常

blog

javascriptでスライドショーを作ってみた

javascriptでスライドショーを作成してみた。その中で学んだこと等を記録していきたいと思う。

HTMLとCSSについて

まず見た目は上画像のような感じで、CSSとHTMLは以下のような感じ。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>スライドショーを作成してみた</title>
</head>
<style>
    body {
        text-align: center;
    }

    h1 {
        margin: 0 auto;
        display: inline-block;
        padding: 10px;
        border: 1px solid;
        font-size: 24px;
        margin-top: 80px;
        margin-bottom: 100px;
    }

    .box {
        content: "";
        position: absolute;
        left: 50%;
        transform: translateX(-45%);
        top: 82px;
        width: 170px;
        height: 56px;
        border: 1px solid;
        z-index: -100;
    }

    .container {
        width: 600px;
        max-width: 100%;
        margin: 0 auto;

    }

    .triangle_right {
        display: block;
        box-sizing: border-box;
        border-top: 50px solid transparent;
        border-bottom: 50px solid transparent;
        border-left: 80px solid#F0897F;
    }

    .triangle_left {
        display: block;
        width: 80px;
        box-sizing: border-box;
        border-top: 50px solid transparent;
        border-bottom: 50px solid transparent;
        border-right: 80px solid#b2ce54;
    }

    .slide {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 800px;
        max-width: 100%;
        margin: 0 auto;
    }


    img {
        width: 100%;
    }
</style>

<body>
    <div class="box"></div>
    <h1>My memory</h1>
    <div class="slide">
        <div class="triangle_left" id="triangle_left"></div>
        <div id="picbox" class="container">
            <img id="slide_img" src="img/pic1.jpg" alt="写真">
        </div>
        <div class="triangle_right" id="triangle_right"></div>
    </div>

Javascriptについて

まず全体のコード内容は以下の通り。

    <script>
        const pics = ["img/pic1.jpg", "img/pic2.jpg", "img/pic3.jpg"];
        const left_tr = document.getElementById("triangle_left");
        const right_tr = document.getElementById("triangle_right");
        const pic = document.getElementById("slide_img");
        const picBox = document.getElementById("picbox")
        let n = 0;
        //写真が切り替わるタイミングの動きを定義
        //ふわっと出る感じに
        function slideStyle() {
            pic.style.opacity = "0";
            pic.style.transition = "inherit"
            setTimeout(() => {
                pic.style.opacity = "1";
                pic.style.transition = "all 2s";
            }, 50)
        }
        //スライドショーの動きを定義
        function slideShow() {
            id = setInterval(() => {
                if (n < 2) {
                    slideStyle();
                    n = n + 1;
                    document.getElementById("slide_img").src = pics[n];
                    console.log("スライド時の挙動");
                } else {
                    slideStyle();
                    n = 0;
                    document.getElementById("slide_img").src = pics[n];
                    console.log("スライド時の挙動");
                }
            }, 3000)
        }
        slideShow();
        right_tr.addEventListener("click", () => {
            if (n < 2) {
                slideStyle();
                clearInterval(id);
                n = n + 1;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            } else {
                slideStyle();
                clearInterval(id);
                n = 0;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            }
        })
        left_tr.addEventListener("click", () => {
            if (n > 0) {
                slideStyle();
                clearInterval(id);
                n = n - 1;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            } else {
                slideStyle();
                clearInterval(id);
                n = 2;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            }
        })
        picBox.addEventListener("click", () => {
            clearInterval(id);
        })

    </script>

以下細かい部分を記録

①各要素の内容を取得

     const pics = ["img/pic1.jpg", "img/pic2.jpg", "img/pic3.jpg"];
        const left_tr = document.getElementById("triangle_left");
        const right_tr = document.getElementById("triangle_right");
        const pic = document.getElementById("slide_img");
        const picBox = document.getElementById("picbox")     

②写真をふわっと変化させるためにstyleを変化させる関数

スライドが切り替わったのち0.05秒かけてふわっと出てくるようにした。

  let n = 0;
        //写真が切り替わるタイミングの動きを定義
        //ふわっと出る感じに
        function slideStyle() {
            pic.style.opacity = "0";
            pic.style.transition = "inherit"
            setTimeout(() => {
                pic.style.opacity = "1";
                pic.style.transition = "all 2s";
            }, 50)
        }

②スライドショーの動き

繰り返し、足していくことで写真が入れ替わるように、そして最大値2を超えたら0に戻るように定義。

//スライドショーの動きを定義
        function slideShow() {
            id = setInterval(() => {
                if (n < 2) {
                    slideStyle();
                    n = n + 1;
                    document.getElementById("slide_img").src = pics[n];
                    console.log("スライド時の挙動");
                } else {
                    slideStyle();
                    n = 0;
                    document.getElementById("slide_img").src = pics[n];
                    console.log("スライド時の挙動");
                }
            }, 3000)
        }
        slideShow();

③右▶をクリックした時の動き

動きとしてはスライドショーを実装した動きと同様であるが、一度clearInterval(id)でスライドショーの動きを止めている。これをしないと、スライドする時間の間隔がおかしくなった。

right_tr.addEventListener("click", () => {
            if (n < 2) {
                slideStyle();
                clearInterval(id);
                n = n + 1;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            } else {
                slideStyle();
                clearInterval(id);
                n = 0;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            }
        })

④左◀をクリックした時の動き

右クリックとは逆に写真が動いていくように定義。

 left_tr.addEventListener("click", () => {
            if (n > 0) {
                slideStyle();
                clearInterval(id);
                n = n - 1;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            } else {
                slideStyle();
                clearInterval(id);
                n = 2;
                document.getElementById("slide_img").src = pics[n];
                slideShow();
            }
        })

⑤写真をクリックしたらスライドショーが止める

 picBox.addEventListener("click", () => {
            clearInterval(id);
        })

思うこと

今回はこのようにスライドショーを実施し、それらしきものはできたが、きっと突っ込みところ満載なのだと思う、、。でも思うように動くとやっぱりうれしい。

contact