JS---案例:完整的轮播图---重点!

案例:完整的轮播图

 

思路:

分5部分做

1. 获取所有要用的元素

2. 做小按钮,点击移动图标部分

3. 做右边焦点按钮,点击移动图片,小按钮颜色一起跟着变 (克隆了第一图到第六图,用索引liObj.setAttribute("index", i),pic = this.getAttribute("index");pic++, 当pic到5的时候,就回到pic=0的时候,同时设置样式)

4. 做左边焦点按钮 (用索引,当pic=0的时候,pic--,设置样式)

5. 自动轮播加上,设置个定时器,鼠标进入就清除定时器,鼠标移开就启用定时器

DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>title>
  <style type="text/css">
    * {
      padding: 0;
      margin: 0;
      list-style: none;
      border: 0;
    }

    .all {
      width: 500px;
      height: 200px;
      padding: 7px;
      border: 1px solid #ccc;
      margin: 100px auto;
      position: relative;
    }

    .screen {
      width: 500px;
      height: 200px;
      overflow: hidden;
      position: relative;
    }

    .screen li {
      width: 500px;
      height: 200px;
      overflow: hidden;
      float: left;
    }

    .screen ul {
      position: absolute;
      left: 0;
      top: 0px;
      width: 3000px;
    }

    .all ol {
      position: absolute;
      right: 10px;
      bottom: 10px;
      line-height: 20px;
      text-align: center;
    }

    .all ol li {
      float: left;
      width: 20px;
      height: 20px;
      background: #fff;
      border: 1px solid #ccc;
      margin-left: 10px;
      cursor: pointer;
    }

    .all ol li.current {
      background: #DB192A;
    }

    #arr {
      display: none;
    }

    #arr span {
      width: 40px;
      height: 40px;
      position: absolute;
      left: 5px;
      top: 50%;
      margin-top: -20px;
      background: #000;
      cursor: pointer;
      line-height: 40px;
      text-align: center;
      font-weight: bold;
      font-family: '黑体';
      font-size: 30px;
      color: #fff;
      opacity: 0.3;
      border: 1px solid #fff;
    }

    #arr #right {
      right: 5px;
      left: auto;
    }
  style>
head>

<body>
  <div class="all" id='box'>
    <div class="screen">
      
      <ul>
        <li><img src="images/1.jpg" width="500" height="200" />li>
        <li><img src="images/2.jpg" width="500" height="200" />li>
        <li><img src="images/3.jpg" width="500" height="200" />li>
        <li><img src="images/4.jpg" width="500" height="200" />li>
        <li><img src="images/5.jpg" width="500" height="200" />li>
      ul>
      <ol>
      ol>
    div>
    <div id="arr"><span id="left"><span><span id="right">>span>div>
  div>
  <script src="common.js">script>
  <script>

    //获取最外面的div
    var box = my$("box");
    //获取相框
    var screen = box.children[0];
    //获取当前相框的宽度
    var imgWidth = screen.offsetWidth;
    //获取ul
    var ulObj = screen.children[0];
    //获取ul中所有的li
    var list = ulObj.children;
    //获取ol
    var olObj = screen.children[1];
    //获取焦点的div
    var arr = my$("arr");

    var pic = 0;//全局变量
    //创建小按钮,根据ul中li的个数
    for (var i = 0; i < list.length; i++) {
      //创建li标签,加入到ol中
      var liObj = document.createElement("li");
      olObj.appendChild(liObj);
      liObj.innerHTML = (i + 1);
      //在每个ol中的li标签上添加一个自定义属性,存储索引值
      liObj.setAttribute("index", i);
      //注册鼠标进入时间
      liObj.onmouseover = function () {
        //先干掉所有ol中的li背景颜色
        for (var j = 0; j < olObj.children.length; j++) {
          olObj.children[j].removeAttribute("class");
        }
        //设置当前鼠标进入li的背景颜色
        this.className = "current";
        //设置鼠标进入的li的当前索引值
        pic = this.getAttribute("index");
        //移动ul
        animate(ulObj, -pic * imgWidth);
      };
    }

    //克隆一个ul中第一个li,加入到ul中的最后----克隆
    ulObj.appendChild(ulObj.children[0].cloneNode(true));

    //  自动播放
    var timeId = setInterval(clickHandle, 1000);

    //鼠标进入到box 显示左右焦点的div
    box.onmouseover = function () {
      arr.style.display = "block";
      //鼠标进入废掉之前的定时器
      clearInterval(timeId);
    };
    //鼠标离开box,隐藏左右焦点的div
    box.onmouseout = function () {
      arr.style.display = "none";
      timeId = setInterval(clickHandle, 1000);
    };

    //右边按钮
    my$("right").onclick = clickHandle;
    function clickHandle() {
      //如果pic的值是5,恰巧是ul中li的个数-1的值,此时页面显示第六个图片
      //而客户认为这是一个图,所以如果用户再次点击按钮,应该看到第二个图片
      if (pic == list.length - 1) {
        //如何从第六个图跳转到第一个图
        pic = 0; //先设置pic=0;
        ulObj.style.left = 0 + "px";//把ul位置还原成开始的默认位置
      }
      pic++;//立刻设置pic+1,那么用户就会看到第二个图片;
      animate(ulObj, -pic * imgWidth);
      //如果pic==5,此时显示第六个图,内容是第一张图片,第一个小按钮有颜色
      if (pic == list.length - 1) {
        //第五个颜色干掉
        olObj.children[olObj.children.length - 1].className = "";
        olObj.children[0].className = "current";
      } else {
        //干掉所有小按钮背景颜色
        for (var i = 0; i < olObj.children.length; i++) {
          olObj.children[i].removeAttribute("class");
        }
        olObj.children[pic].className = "current";
      }
    };

    //左边按钮
    my$("left").onclick = function () {
      if (pic == 0) {
        pic = 5;
        ulObj.style.left = -pic * imgWidth + "px";
      }
      pic--;
      animate(ulObj, -pic * imgWidth);
      //设置小按钮的颜色---先所有小按钮干掉颜色
      for (var i = 0; i < olObj.children.length; i++) {
        olObj.children[i].removeAttribute("class");
      }
      //当前pic索引对应的按钮,设置颜色
      olObj.children[pic].className = "current";
    };

// 

</body>

</html>

你可能感兴趣的:(JS---案例:完整的轮播图---重点!)