3-4图片自动轮播

3-4图片自动轮播

老师

function changeImg(){

   pics[index].style.display="block";

}按照视频中,应该在鼠标触碰离开后,图片能自动轮播到最后一张图然后停止。然而我测试时图片一直停留在第一张图,无法实现轮播。为什么?

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>b</title>
  <!-- <link rel="stylesheet" type="text/css" href="css/styleb.css">  -->
  <style type="text/css">
    *{
  margin: 0;
  padding: 0;
}
ul{
  list-style: none;
}
body{
  font-family: "微软雅黑";
}
.main,.banner,.banner-slide{
  width: 1200px;
  height: 460px;
}
.main{
  margin: 30px auto;
  position: relative;
  overflow: hidden;
}
.banner{overflow: hidden;}
.banner-slide{display: none;}
.slide1{
  background-image: url('../img/bg1.jpg');
}
.slide2{
  background-image: url('../img/bg2.jpg');
}
.slide3{
  background-image: url('../img/bg3.jpg');
}
.slide-active{display: block;}
.button{
  width: 40px;
  height: 80px;
  background:url('../img/arrow.png') no-repeat center center;
  position: absolute;
    top: 50%;
    margin-top: -40px;
    left: 244px;
}
.next{
  left: auto;
  right: 0;
}
.prev{
  transform: rotate(180deg);
}
.button:hover{
  background-color:gray;
  opacity: 0.8;
  filter: alpha(opacity=80);
}
.dots{
  position: absolute;
  bottom: 24px;
  right: 20px;
}
.dots span{
  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;
  display: inline-block;
  margin-left: 8px;
  cursor: pointer;
}
span.active{
  background:white;
  box-shadow: 0 0 0 2px rgba(7,17,27,0.4) inset;
}
  </style>
</head>
<body>
  <div class="main" id="main">
    <!-- 图片轮播 -->
    <div class="banner" id="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>      
    </div>
    <!-- 按钮-->
    <a href="javascript:void(0)" class="button prev"></a>
    <a href="javascript:void(0)" class="button next"></a>
    <!-- 圆点 -->
    <div class="dots" id="dots">
      <span class="active"></span>
      <span></span>
      <span></span> 
    </div>
  </div>
  <script type="text/javascript">
    function byId(id)
{
  return typeof(id)==='string'?document.getElementById(id):id;
}
var main=byId('main'),
    timer=null,
    index=0,
    len=byId('banner').getElementsByTagName('div').length,
    pics=byId('banner').getElementsByTagName('div');

function picSlide(){
  main.onmouseover=function(){
       // 清除定时器
  }
  main.onmouseout=function(){
    setInterval(function(){
           index++;
           if(index>=len)
           {
            index=0;
           }
           changeImg();
    },2000)
  }
}
function changeImg(){
   // for(var i=0;i<len;i++)
   // {
   //   pics[i].style.display='none';
   // }
   pics[index].style.display="block";
}
picSlide();
  </script>
</body>
</html>


正在回答

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

2回答

你好同学 , 因为你把如下代码注释了:

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

这样 ,当你轮播的时候 ,只会把当前的显示 ,而不会把其他的图片隐藏 , 因为当几张图片全部显示的时候 , 默认第一张在最上面 , 如下:

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

所以会一直显示第一张 . 把注释的加上即可 . 另外 , 建议在函数中自动调用图片轮播的事件 ,当页面打开时 ,默认进行图片切换 :

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

希望能够帮到你 , 祝学习愉快 ,望采纳 .


  • 老师,3-4视频6分30秒钟说:三张图片全都display:block,会停留在最后一张图片,前两张图片会被覆盖掉。怎么与您说的相反啊?
    2018-12-21 16:41:47
好帮手慕夭夭 2018-12-21 19:37:25

你好同学 , 因为你的代码中没有给图片盒子设置定位 ,而视频中老师的设置了定位 , 所以效果才与视频中的不一样 . 如下视频中设置:

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

定位之后产生的层级关系 , 第三张图片的层级是最大的 .你可以如下设置定位测试一下:

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

因为代码的区别才会产生不同的效果 , 希望解答了你的疑惑, 祝学习愉快 !

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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