js는 회전식 이미지를 구현합니다(페이드 인 및 페이드 아웃 효과).

목차

I. 소개

2. 캐러셀 이미지 구현 효과

3. 기능

넷째, 코드 구현

 1.html+css 부분 코드

2.js 메인 코드

5. 요약


I. 소개

회전목마 사진이라고 하면 누구나 익숙할텐데요 대부분의 웹사이트 홈페이지도 면접관의 질문입니다: 회전목마 사진을 쓸 수 있나요? 그 존재를 보게 될 것입니다. 비록 달성하기가 그리 어렵지는 않지만, 정말 글을 잘 쓰는 사람이 많지 않기 때문에 제가 쓴 글을 정리하고, 여러분과 함께 검토하고 정리하기 위해 이렇게 글을 쓰게 되었습니다.

2. 캐러셀 이미지 구현 효과

 

 

3. 기능

1. 자동 재생 구현

2. 재생을 중지하려면 마우스를 움직이고 왼쪽 및 오른쪽 전환 버튼을 누르거나 호출기의 작은 점을 클릭하여 사진을 전환합니다.

3. 그림이 페이드 인 및 페이드 아웃의 애니메이션 효과를 구현합니다.

넷째, 코드 구현

 1.html+css 부분 코드

    <div class="banner">
        <!-- 图片部分 -->
        <div class="wrap">
            <div class="item">
                <img src="./img/02.jpg" alt="">
            </div>
            <div class="item">
                <img src="./img/01.gif" alt="">
            </div>
            <div class="item">
                <img src="./img/03.jpg" alt="">
            </div>
            <div class="item">
                <img src="./img/04.jpg" alt="">
            </div>
        </div>
        <!-- 分页器部分 -->
        <div class="pagenation">
            <div id="pagenation-item0"></div>
            <div id="pagenation-item1"></div>
            <div id="pagenation-item2"></div>
            <div id="pagenation-item3"></div>
        </div>
        <!-- 上一张下一张部分 -->
        <div class="goon"></div>
        <div class="goout"></div>
    </div>
 .banner {
            width: 700px;
            /* border: 1px solid red; */
            margin: 100px auto;
            position: relative;
            height: 700px;
            /* overflow: hidden;  */
        }

        .item img {
            width: 100%;
            height: 700px;
            vertical-align: top;
        }

        .item {
            width: 700px;
            position: absolute;
            opacity: 0;
        }

        .item:first-child {
            opacity: 1;
        }

        .banner .wrap {
            /* width:2800px ; */
            /* border: 1px solid green; */
            height: 700px;

        }

        .pagenation {
            position: absolute;
            /* border: 1px solid red; */
            left: 50%;
            transform: translateX(-50%);
            display: flex;
            bottom: 40px;
        }

        .pagenation>div {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background-color: grey;
            margin-right: 10px;
            cursor: pointer;
        }

        .pagenation>div:last-child {
            margin-right: 0;
        }

        .pagenation>div:first-child {
            background: purple;
        }

        .goon {
            width: 0px;
            height: 0px;
            /* background-color: pink; */
            border-top: 25px solid transparent;
            border-right: 25px solid pink;
            border-bottom: 25px solid transparent;
            border-left: 25px solid transparent;
            opacity: 0.5;
            position: absolute;
            top: 300px;
            cursor: pointer;
            left: -10px;
        }

        .goout {
            width: 0px;
            height: 0px;
            border-top: 25px solid transparent;
            border-right: 25px solid transparent;
            border-bottom: 25px solid transparent;
            border-left: 25px solid pink;
            opacity: 0.5;
            position: absolute;
            top: 300px;
            right: -10px;
            cursor: pointer;
        }

2.js 메인 코드

<script>
        //对应图片 小圆点 的下标
        var index = 0;
        //获取所有的图片
        var itemList = document.getElementsByClassName("item");
        // 定时器
        var t2 = null;
        // 先让所有的图片 透明度 全都为0 
        //获取小圆点的数组
        var pageItems = document.querySelectorAll(".pagenation>div")
        // console.log(pageItems)
        //用定时器实现图片的切换
        var t1 = setInterval(function () {
            index = index >= (itemList.length - 1) ? 0 : ++index;
            // index++;
            for (var i = 0; i < itemList.length; i++) {
                itemList[i].style.opacity = 0;
                pageItems[i].style.background = "grey"
            }
            //动画效果的设置
            itemList[index].style.transition = "opacity 1s ease .2s"
            itemList[index].style.opacity = 1
            pageItems[index].style.background = "purple"

        }, 1500)
        // 鼠标进入轮播区域 停止定时器
        document.getElementsByClassName("banner")[0].onmouseover = function () {

            if (t2 != null) {
                clearInterval(t2)
            } else {
                clearInterval(t1)
            }
        }
        document.getElementsByClassName("banner")[0].onmouseout = function () {
            t2 = setInterval(function () {
                index = index >= (itemList.length - 1) ? 0 : ++index;
                // index++;
                for (var i = 0; i < itemList.length; i++) {
                    itemList[i].style.opacity = 0;
                    pageItems[i].style.background = "grey"
                }
                itemList[index].style.transition = "opacity 1s ease .2s"
                itemList[index].style.opacity = 1
                pageItems[index].style.background = "purple"

            }, 1500)

        }
        // 分液器里面的 div 
        //   for(var i=0;i<pageItems.length;i++){
        //     pageItems[i].style.background="grey"
        //         pageItems[i].onclick= function(){
        //             this.style.background="purple"
        //         }
        //   }
        // 事件委托来
        document.querySelector(".pagenation").onclick = function (e) {
            // 判断它是否是点击 子元素 触发???
            // console.log(e.target)
            if (e.target.className == "pagenation") {
                // console.log("父元素点击触发")
            } else {
                // 子元素触发
                // console.log("子元素点击触发")
                var id = e.target.id;
                var pageIndex = null;
                // console.log(id)
                for (var i = 0; i < pageItems.length; i++) {
                    pageItems[i].style.background = "grey"

                    if (id.indexOf(i) > 0) {
                        pageIndex = i;
                    }
                }
                e.target.style.background = "purple"
                // 图片 跟随变更
                index = pageIndex
                for (var i = 0; i < itemList.length; i++) {
                    itemList[i].style.opacity = 0;
                }
                itemList[index].style.opacity = 1;
                // console.log(pageIndex)
                //index
            }

            console.log("--------")
        }
        //获取节点
        var goout = document.getElementsByClassName("goout")[0];
        var goon = document.getElementsByClassName("goon")[0];
        goout.onclick = function () {
            //实现思路和自动切换思路一样
            index = index >= (itemList.length - 1) ? 0 : ++index;
            // index++;
            for (var i = 0; i < itemList.length; i++) {
                itemList[i].style.opacity = 0;
                pageItems[i].style.background = "grey"
            }
            itemList[index].style.transition = "opacity 1s ease .2s"
            itemList[index].style.opacity = 1
            pageItems[index].style.background = "purple"
        }
        goon.onclick = function () {
            index = index <= 0 ? itemList.length - 1 : --index;
            // index++;
            for (var i = 0; i < itemList.length; i++) {
                itemList[i].style.opacity = 0;
                pageItems[i].style.background = "grey"
            }
            itemList[index].style.transition = "opacity 1s ease .2s"
            itemList[index].style.opacity = 1
            pageItems[index].style.background = "purple"
        }
    </script>

5. 요약

페이드 인 및 페이드 아웃 이미지 캐러셀을 구현하는 방법에는 여러 가지가 있습니다. 먼저 이미지 위치를 설정합니다: 절대  절대 위치 지정, 그 다음 이미지  불투명도를   0으로 설정하고 첫 번째 이미지를 1로 설정한 다음 타이머를 사용하여 제어합니다. 이미지의 자동 전환. 애니메이션의 전환 효과를 사용하여 페이드 인 및 페이드 아웃을 달성하십시오. 글이 좀 복잡한데 큰놈들이 더 좋은 방법이 있으면 같이 올려서 의논했으면 좋겠어요!

추천

출처blog.csdn.net/A20201130/article/details/122599267