[关闭]
@panhonhang 2018-07-19T10:13:23.000000Z 字数 3746 阅读 758

如何用js实现图片轮播


轮播,无论是文字轮播还是图片轮播,他们的原理是一样的,都是通过定时器执行循环展示和隐藏。
1.原理

将所有图片放在一个父容器div里面,通过display属性来设置图片的出现与隐藏;定时器进行计时来计算偏移量实现图片自动轮播。

2.实现:

实现布局只显示一张图片,首先给容器一个固定的长和宽,然后设置over-flow:hidden。
实现图片自动轮播必须要有定时器进行计时。

3.步骤:

(1)实现图片平铺

HTML代码部分:

<div class="main_div">
<div class="arrows">
     <span title="1" class="arrow"><</span>
     <span title="0" class="arrow" style="float: right">></span>
</div>
<ul class="ul_img">
         <li class="li_img">![](images/摄图网-水珠在竹叶上.jpg)</li>
         <li class="li_img">![](images/摄图网-在海边的人.jpg)</li>
         <li class="li_img">![](images/摄图网-清凉的荷叶.jpg)</li>
         <li class="li_img">![](images/摄图网-绵延不绝的山岭.jpg)</li>
   </ul>
</div>

 <div style="margin-left: 600px">
         <div class="div_btn"></div>
         <div class="div_btn"></div>
         <div class="div_btn"></div>
         <div class="div_btn"></div>
</div>

这一步实现了四张图片,左右方向键与底部的四个圆角矩形。

CSS部分:

    <style>
    img {
        width: 100%;
    }

    .li_img {
        width: 800px;
        float: left;
        list-style: none;
    }

    .ul_img {
        width: 6000px;
        padding: 0px;
        margin: 0px;
        transition: all 2s;
    }

    .main_div {
        width: 800px;
        overflow: hidden;
        position: relative;
        top: 100px;
        left: 350px;
    }

    .arrows {
        z-index: 9999;
        position: absolute;
        padding-top: 230px;
        width: 800px;
    }

    .arrows span {
        font-size: 3em;
        color: seashell;
    }

    .arrows span:hover {
        /*变小手*/
        cursor: pointer;
        background-color: rgba(192, 192, 192, 0.29);
    }

    .div_btn {
        float: left;
        border-radius: 100px;
        background-color: aquamarine;
        width: 60px;
        height: 10px;
        margin-left: 10px;
        margin-top: 130px;
    }

    .div_btn:hover {
        background-color: aqua;

    }

(2)实现图片轮播
要实现自动,必须有定时器进行计时。对于定时器有setInterval()与setTimeout()两种方法。他们的区别简单来说在于setInterval()可以执行多次,而setTimeout()只执行一次。

详情可见:你真的了解setTimeout和setInterval吗? – 前端技术漫游指南

因为图片自动轮播需要每隔一段时间执行一次,所以选择setInterval()函数。

图片可以自动右向轮播,轮播至最后一张图片的时候,反向向左轮播,循环反复

首先声明需要的全局变量:

//跑动的次数
var count = 0;
//动画的执行方向
var isgo = false;
//定义计时器对象
var timer;

获取图片元素:

/*获取ul元素*/
var ul_img = document.getElementsByClassName("ul_img")[0];
//获取所有的li图片元素
var li_img = document.getElementsByClassName("li_img");

showtime()函数部分:

function showtime() {
         timer = setInterval(function (){
            if (isgo == false) {
               count++;
               ul_img.style.transform = "translate(" + -800 * count + "px)";
                 if (count >= li_img.length - 1) {
                        count = li_img.length - 1;
                        isgo = true;
              }
         }
     }, 4000);
 }

判断语句的目的是:在count大于等于li.img.length-1(即count >= 3)时,禁止count再自增,同时改变isgo的值,让轮播图开始反向滚动。else的情况就是控制图片反向轮播,所以以上代码很好理解,就是count--,并且在count <= 0时,为isgo重新设置false,让图片再正向轮播,循环往复,最后再调用showtime()函数。

为方向键添加onclick事件,以便我们可以通过其控制方向:

     for (var i = 0; i < arrow.length; i++) {
      //鼠标悬停时
      arrow[i].onmouseover = function () {
      //停止计时器
      clearInterval(timer);
      }
      //鼠标离开时
      arrow[i].onmouseout = function () {
      //添加计时器
      showtime();
     }
     arrow[i].onclick = function () {
     //区分左右
     if (this.title == 0) {
       count++;
      if (count > 3) {
       count = 0;
     }
    }
      else {
       count--;
      if (count < 0) {
       count = 3;
     }
    }
   ul_img.style.transform = "translate(" + -800 * count + "px)";
 }
} 

关于div_btn[b].index = b这条语句。参考文章 关于在for循环中绑定事件打印变量i是最后一次

鼠标悬停事件:

   div_btn[b].onmouseover = function () {
      clearInterval(timer);

  for (var a = 0; a < div_btn.length; a++) {
      div_btn[a].style.backgroundColor = "aquamarine";
   }
      div_btn[this.index].style.backgroundColor = "aqua";
  //为了控制方向
  if (this.index == 3) {
     isgo = true;
   }
  if (this.index == 0) {
     isgo = false;
   }
  //让count值对应
  count = this.index;
  ul_img.style.transform = "translate(" + -800 * this.index + "px)";
}

}

鼠标离开事件:

 div_btn[b].onmouseout = function () {
  //添加计时器
  showtime();
    }
}

图片自动轮播和控制左右方向键时,底部圆角矩形也能随之变色。

 for (var a = 0; a < div_btn.length; a++) {
          div_btn[a].style.backgroundColor = "aquamarine";
       }
          div_btn[count].style.backgroundColor = "aqua";
}

参考博文:十五分钟用 JavaScript 基础写一个图片轮播效果 + 思路详解

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注