jQuery轮播图(详细注释)

js渣渣也能简单做出

在理想情况下用 吧外层div的class名起为banner   ul li的布局

下面是css代码放图片的li记得浮动;

.banner {
  width: 15rem;
  height: 5.22rem;
  position: relative;
  overflow: hidden;
}
.banner ul {
  width: 60rem;
  height: 5.22rem;
  position: absolute;
}
.banner ul li {
  float: left;
  width: 15rem;
  height: 5.22rem;
}
.banner img {
  width: 15rem;
  height: 5.22rem;
}

这里是HTML代码 img标签里直接放自己想轮播的图片

a标签是轮播图左右按钮这里引用的是阿里icon font图标库的图标

 <div class="banner">
        <ul>

            <li><img src="./img/01.webp"></li>
            <li><img src="./img/02.webp"></li>
            <li><img src="./img/03.webp"></li>
            <li><img src="./img/04.webp"></li>
            <li><img src="./img/05.webp"></li>
        </ul>
        <div class="num">
            <span class="on"></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
        <a href="javascript:" class="prev"><i class="iconfont icon-lunbozuofangun"></i></a>
        <a href="javascript:" class="next"><i class="iconfont icon-lunboyoufangun"></i></a>
    </div>

最重要的来了jQuery代码

   $(function () {
            var timer = null;
            //创建一个变量获取li宽度 
            var liw = $('.banner ul li:first').innerWidth();
            // 定时器名字叫time
            timer = setInterval(function () {
                play()
            }, 2000)

            //这里是吧轮播效果封装为了一个函数叫paly 方便后面调用
            function play() {
                    //每2000毫秒把外层div的视口往左拉当前li的宽度
                $('.banner ul').animate({ left: -liw }, function () {
                       // 把最后一张图片追加到前面 无缝轮播
                    $(this).css("left", 0).find("li:first").appendTo(this);
                })
            }

            //当鼠标划过清除定时器  暂停  这里用到的是jq里的hover事件
            $(".banner").hover(function () {
                clearInterval(timer);
                //移出继续
            }, function () {
                timer = setInterval(function () {
                   play()
                }, 2000)
            })
            //点击右箭头事件 这里的.next就是前面的字体图标
               //点击时候调用play()函数
            $('.next').click(function(){
                play()
            })
           //点击左箭头事件 这里的.prev就是前面的字体图标
            $('.prev').click(function(){
                $('.banner ul').css('left', -liw ).find("li:last").prependTo('.banner ul')
                $('.banner ul').animate({ left:0});
                
              
            })
        }) 

HTML结构: ```html <div class="slider"> <ul class="slider-list"> <li><img src="img/img1.jpg"></li> <li><img src="img/img2.jpg"></li> <li><img src="img/img3.jpg"></li> <li><img src="img/img4.jpg"></li> </ul> <div class="slider-nav"> <ul> <li class="active"></li> <li></li> <li></li> <li></li> </ul> </div> </div> ``` CSS样式: ```css .slider { position: relative; width: 100%; height: 400px; overflow: hidden; } .slider-list { position: absolute; top: 0; left: 0; width: 100%; height: 100%; margin: 0; padding: 0; } .slider-list li { position: absolute; top: 0; left: 0; width: 100%; height: 100%; list-style: none; margin: 0; padding: 0; opacity: 0; z-index: 1; transition: opacity 1s ease-in-out; } .slider-list li.active { opacity: 1; z-index: 2; } .slider-nav { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); z-index: 3; } .slider-nav ul { list-style: none; margin: 0; padding: 0; display: flex; } .slider-nav ul li { width: 20px; height: 20px; border-radius: 50%; background-color: #fff; margin-right: 10px; cursor: pointer; } .slider-nav ul li.active { background-color: #333; } ``` jQuery代码: ```javascript $(function() { var $slider = $('.slider'); var $sliderList = $slider.find('.slider-list'); var $sliderLi = $sliderList.find('li'); var $sliderNav = $slider.find('.slider-nav'); var $sliderNavLi = $sliderNav.find('li'); var len = $sliderLi.length; var index = 0; var intervalId = null; // 初始化 $sliderLi.eq(index).addClass('active'); $sliderNavLi.eq(index).addClass('active'); // 自动轮播 function autoPlay() { intervalId = setInterval(function() { $sliderLi.eq(index).removeClass('active'); $sliderNavLi.eq(index).removeClass('active'); index = (index + 1) % len; $sliderLi.eq(index).addClass('active'); $sliderNavLi.eq(index).addClass('active'); }, 3000); } autoPlay(); // 鼠标移入停止轮播,移出继续轮播 $slider.hover(function() { clearInterval(intervalId); }, function() { autoPlay(); }); // 控制图片显示时间,每张图片显示时间不同 var timeArr = [2000, 3000, 2500, 3500]; // 每张图片显示时间的数组 $sliderLi.each(function(i, el) { $(el).data('time', timeArr[i]); // 将每张图片的显示时间存储在data中 }); function playWithTime() { intervalId = setInterval(function() { $sliderLi.eq(index).removeClass('active'); $sliderNavLi.eq(index).removeClass('active'); index = (index + 1) % len; $sliderLi.eq(index).addClass('active'); $sliderNavLi.eq(index).addClass('active'); }, $sliderLi.eq(index).data('time')); // 根据当前图片的显示时间设置定时器时间 } playWithTime(); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值