朝阳博客

  • Article
  • Project
  • HTML+CSS
  • Bootstrap
  • JavaScript
  • jQuery
  • PHP
  • Java
  • Linux
  • MySQL
朝阳博客
一款专注于博客的响应式网站
  1. 首页
  2. JavaScript
  3. 正文

原生js实现轮播图

2021年1月21日 1688点热度 1人点赞 0条评论
1.HTML代码
               <div class="swiper">
                    <ul class="imgBox">
                        <li><img src="./Images/dunkin-master-mens-basketball-t-shirt-LF0LKc.jpg" alt="" /></li>
                        <li><img src="./Images/dunkin-master-mens-basketball-t-shirt-LF0LKc (1).jpg" alt="" /></li>
                        <li><img src="./Images/dunkin-master-mens-basketball-t-shirt-LF0LKc (2).jpg" alt="" /></li>
                        <li><img src="./Images/dunkin-master-mens-basketball-t-shirt-LF0LKc (3).jpg" alt="" /></li>
                        <li><img src="./Images/dunkin-master-mens-basketball-t-shirt-LF0LKc (4).jpg" alt="" /></li>
                    </ul>
                    <div class="btn pre">&lt;</div>
                    <div class="btn next">&gt;</div>
                    <ul class="item">
                        <!--<li class="active"></li>
                        <li></li>
                        <li></li>-->
                    </ul>
                </div>
2.css代码
    .swiper{
            border: 1px solid black;
            margin: 50px auto;
            position: relative;
            overflow: hidden;
        }
        .swiper ul{
            width: 9999px; //更改
            overflow: hidden;
        }
        .swiper li{
            float: left;
        }
        .btn{
            position: absolute;
            top: 50%;
            left: -4px;
            width: 30px;
            height: 30px;
            margin-top: -15px;
            text-align: center;
            line-height: 27px;
            border-radius: 50%;
            font-size: 26px;
            color: #fff;
            background: #666;
            opacity: .5;
            cursor: pointer;
            -webkit-user-select: none;
            -ms-user-select: none;
        }
        .next{
            left: 830px;//更改
        }
        .transi{
            transition: 500ms;
        }
        ul.item{
            width: 80px;
            position: absolute;
            bottom: 20px;
            left: 50%;//更改
            transform: translateX(-50%);
            overflow: hidden;
            z-index: 1000;
        }
        .item li{
            float: left;
            width: 10px;
            height: 10px;
            border: 1px solid #fff;
            background: #fff;
            border-radius: 50%;
            margin: 0 3px;
        }
        li.active{
            background: gray;
        }
3.js代码
              window.onload=function(){
                        let swiper = document.querySelector(".swiper"),
                            pre = swiper.querySelector(".pre"),
                            next = swiper.querySelector(".next"),
                            _ul = swiper.querySelector(".imgBox"),
                            ali = _ul.querySelectorAll('li'),
                            aImg = swiper.querySelectorAll("li img"),
                            imgW = aImg[0].offsetWidth,
                            index = 1,
                            isTransitioned = true,
                            item = swiper.querySelector('.item');
                        let cloneLi = ali[0].cloneNode(true);
                        _ul.appendChild(cloneLi);
                        let cloneLastLi = ali[ali.length-1].cloneNode(true);
        //              _ul.insertBefore(cloneLastLi,ali[0]);
                        _ul.prepend(cloneLastLi);
                        next.addEventListener("click",()=>{
                            if(isTransitioned){
                                index++;
                                move();
                                fenyeq(index);
                            }
                        })
                        _ul.style.transform="translateX("+(-imgW*index)+"px)";
                        pre.addEventListener("click",()=>{
                            if(isTransitioned){
                                index--;
                                move();
                                fenyeq(index);
                            }
                        })
                        setInterval(function(){
                            if(isTransitioned){
                                index++;
                                move();
                                fenyeq(index);
                            }
                        },4000)
                        _ul.addEventListener("transitionend",()=>{
                            if(index == aImg.length+1){
                                index = 1;
                                _ul.classList.toggle("transi");
                                _ul.style.transform="translateX("+(-imgW*index)+"px)";
                            }
                            if(index==0){
                                index=aImg.length;
                                _ul.classList.toggle("transi");
                                _ul.style.transform="translateX("+(-imgW*index)+"px)";
                            }
                            isTransitioned = true;
                        })
                        for(let i=0;i<aImg.length;i++){
                            var newLi = document.createElement('li');
                            item.appendChild(newLi);
                        }
                        item.children[0].classList.add('active');
                        for(let j=0;j<item.children.length;j++){
                                item.children[j].addEventListener('click',()=>{
                                    for(let q=0;q<item.children.length;q++){
                                        item.children[q].classList.remove('active');
                                    }
                                    item.children[j].classList.add('active');
                                    index = j+1;
                                    _ul.classList.add('transi');
                                    _ul.style.transform="translateX("+(-imgW*index)+"px)";
                                })
                            }
                        function fenyeq(index){
                            for(let k=0;k<item.children.length;k++){
                                item.children[k].classList.remove('active');
                            }
                            index = index -1;
                            index = index==item.children.length?0:index;
                            index = index<0?item.children.length-1:index;
                            item.children[index].classList.add('active');
                        }
                        function move(){
                            _ul.classList.add("transi");
                            _ul.style.transform="translateX("+(-imgW*index)+"px)";
                            isTransitioned = false;
                        }
                }
以上代码已经亲测,甚至部署过项目里面,需要解读css
标签: 暂无
最后更新:2021年3月17日

aiyao

你要加油,你喜欢的人还没结婚。

点赞

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 zhaoyangweb.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

冀ICP备2021020018号-1