为什么循环一圈之后图片卡在最后一张了 小圆点正常

为什么循环一圈之后图片卡在最后一张了 小圆点正常

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>jquery实现轮播图</title>
   <link rel="stylesheet" href="css/lunbotu.css">
   <script type="text/javascript" src="js/jquery-1.12.4.js"></script>
   <script type="text/javascript" src="js/lunbotu.js"></script>
</head>
<body>
<div class="main">
   <div class="banner">
       <a href="">
           <div class="banner-slide slide1 slide-active"></div>
       </a>
       <a href="">
           <div class="banner-slide slide2"></div>
       </a>
       <a href="">
           <div class="banner-slide slide3"></div>
       </a>
       <a href="">
           <div class="banner-slide slide4"></div>
       </a>
       <a href="">
           <div class="banner-slide slide5"></div>
       </a>
   </div>
   <a href="javascript:;" class="button prev" id="prev"></a>
   <a href="javascript:;" class="button next" id="next"></a>
   <div class="dots" id="dots">
       <span class="active"></span>
       <span></span>
       <span></span>
       <span></span>
       <span></span>
   </div>
</div>
</body>
</html>

*{
   padding: 0;
   margin: 0;
}
.main{
   width: 1200px;
   height: 460px;
   overflow: hidden;
   margin: 30px auto;
   position: relative;
}
.banner{
   width: 1200px;
   height: 460px;
   overflow: hidden;
   position: relative;
}
.banner-slide{
   width: 1200px;
   height: 460px;
   background-repeat: no-repeat;
   position: absolute;
   display: none;
}
.slide-active {
   display: block;
}

.slide1 {
   background-image: url("../img/1.jpg");
}
.slide2 {
   background-image: url("../img/2.jpg");
}
.slide3 {
   background-image: url("../img/3.jpg");
}
.slide4 {
   background-image: url("../img/4.jpg");
}
.slide5 {
   background-image: url("../img/5.jpg");
}
.button.prev{
   position: absolute;
   width: 40px;
   height: 80px;
   left:0;
   top: 50%;
   margin-top: -40px;
   background: url("../img/pre2.png") no-repeat center center;
}
.button.next{
   position: absolute;
   width: 40px;
   height: 80px;
   right:0;
   top: 50%;
   margin-top: -40px;
   background: url("../img/pre.png") no-repeat center center;
}
.button:hover{
   background-color: #333;
   opacity: 0.8;
}
.dots{
   position: absolute;
   right: 20px;
   bottom: 24px;
}

.dots span{
   display: inline-block;
   width: 12px;
   height: 12px;
   border-radius: 50%;
   background: rgba(7,17,27,0.4);
   box-shadow: 0 0 0 2px rgba(255,255,255,0.8) inset;
}

.dots span.active{
   background: #fff;
   box-shadow: 0 0 0 2px rgba(7,17,27,0.4) inset;
}

$(function () {
   var index = 0,
       timer = null,
       main = $('.main'),
       pics = $('.banner-slide'),
       len = pics.length,
       dots = $('.dots>span'),
       prev = $('.prev'),
       next = $('.next')

   function changeImg() {
       pics.eq(index).addClass('slide-active').siblings().removeClass('slide-active');
       dots.eq(index).addClass('active').siblings().removeClass('active');
   }

   function slideimg() {
       main.mouseover(function () {
           stopplay()
       }).mouseout(function () {
           startplay()
       })
   }

   slideimg()

   function startplay() {
       timer = setInterval(function () {
           index++;
           if (index >= len) index = 0;
           changeImg()
       }, 2000)
   }

   function stopplay() {
       if (timer) clearInterval(timer)
   }

   main.mouseout();
})

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕星星 2019-02-03 13:10:57

这两个是一个事件,只不过开始把事件写在了slideimg函数里面,调用事件的时候写在了函数外面,所以需要先调用slideimg函数,调用里面的事件才能成功。

你还可以这样写:

http://img1.sycdn.imooc.com//climg/5c5677d4000182a005060317.jpg

好帮手慕星星 2019-02-03 13:02:42

老师明白同学的意思,上面解释的也是这个意思,mian.mouseout事件在slideimg函数中,需要先调用函数,再调用事件才能执行。

http://img1.sycdn.imooc.com//climg/5c567577000124b502930067.jpg

main.mouseout()如果只这样写,里面并没有调用自动轮播的方法startplay(),所以不会自动轮播。

http://img1.sycdn.imooc.com//climg/5c5677150001343406830621.jpg

  • 提问者 qq_浮巷旧人_0 #1
    这个方法和事件不是相互独立嘛 必须得先执行这个事件才能执行方法嘛?
    2019-02-03 13:07:49
好帮手慕星星 2019-02-03 12:20:24

因为mouseout事件在slideimg方法里面,所以需要先调用方法,才能调用里面的事件。

http://img1.sycdn.imooc.com//climg/5c566bb50001178904930226.jpg

可以测试理解下。

  • 提问者 qq_浮巷旧人_0 #1
    我说的是触发mouseout的这个方法
    2019-02-03 12:54:40
  • 提问者 qq_浮巷旧人_0 #2
    不是这个mouseout事件函数
    2019-02-03 12:56:30
好帮手慕星星 2019-02-02 17:12:34

你好,是图片关系没有找对,图片外层包裹着a标签,所以不能直接找同辈添加slide-active类:

http://img1.sycdn.imooc.com//climg/5c555ecb00016e3907320172.jpg

应该先找到当前图片的父元素,然后找父元素的同辈,再找到子元素去除样式,如下:

http://img1.sycdn.imooc.com//climg/5c555efa00017b1e10550171.jpg

自己测试下,祝学习愉快!

  • 提问者 qq_浮巷旧人_0 #1
    为什么slideimg()放在 main.mouseout后面不行 无法实现自动轮播
    2019-02-02 22:16:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师