美文网首页
jQuery实现轮播图

jQuery实现轮播图

作者: LcoderQ | 来源:发表于2020-10-21 14:16 被阅读0次
html:
  <div id="container">

    <div id="list" style="left: -600px;">

      <img src="img/5.jpg" alt="5" />

      <img src="img/1.jpg" alt="1" />

      <img src="img/2.jpg" alt="2" />

      <img src="img/3.jpg" alt="3" />

      <img src="img/4.jpg" alt="4" />

      <img src="img/5.jpg" alt="5" />

      <img src="img/1.jpg" alt="1" />

    </div>

    <div id="pointsDiv">

      <span index="1" class="on"></span>

      <span index="2"></span>

      <span index="3"></span>

      <span index="4"></span>

      <span index="5"></span>

    </div>

    <a href="javascript:;" id="prev" class="arrow">&lt;</a>

    <a href="javascript:;" id="next" class="arrow">&gt;</a>

  </div>

css:

<style type="text/css">
    /*去除内边距,没有链接下划线*/
    * {
      margin: 0;
      padding: 0;
      text-decoration: none;
    }

    /*让<body有20px的内边距*/
    body {
      padding: 20px;
    }

    /*最外围的div*/
    #container {
      width: 600px;
      height: 400px;
      overflow: hidden;
      position: relative;
      /*相对定位*/
      margin: 0 auto;
    }

    /*包含所有图片的<div>*/

    #list {
      width: 4200px;
      /*7张图片的宽: 7*600 */
      height: 400px;
      position: absolute;
      /*绝对定位*/
      z-index: 1;

    }

    /*所有的图片<img>*/
    #list img {
      float: left;
      width: 600px;
      /*浮在左侧*/
    }

    /*包含所有圆点按钮的<div>*/
    #pointsDiv {
      position: absolute;
      height: 10px;
      width: 100px;
      z-index: 2;
      bottom: 20px;
      left: 250px;
    }

    /*所有的圆点<span>*/

    #pointsDiv span {
      cursor: pointer;
      float: left;
      border: 1px solid #fff;
      width: 10px;
      height: 10px;
      border-radius: 50%;
      background: #333;
      margin-right: 5px;
    }

    /*第一个<span>*/

    #pointsDiv .on {
      background: orangered;
    }

    /*切换图标<a>*/

    .arrow {
      cursor: pointer;
      display: none;
      line-height: 39px;
      text-align: center;
      font-size: 36px;
      font-weight: bold;
      width: 40px;
      height: 40px;
      position: absolute;
      z-index: 2;
      top: 180px;
      background-color: RGBA(0, 0, 0, 0.3);
      color: #fff;
    }

    /*鼠标移到切换图标上时*/
    .arrow:hover {
      background-color: RGBA(0, 0, 0, 0.7);
    }

    /*鼠标移到整个div区域时*/
    #container:hover .arrow {
      display: block;
      /*显示*/
    }

    /*上一个切换图标的左外边距*/
    #prev {
      left: 20px;
    }

    /*下一个切换图标的右外边距*/
    #next {
      right: 20px;
    }
  </style>

js:

<script src="./js/jquery.1.10.2.js"></script>
  <!-- <script type="text/javascript" src="js/app.js"></script> -->
  <script> $(function () {
      //用于操作鼠标移入停止播放 -->
      var $container = $('#container')
      //用于操作切换图片 -->
      var $list = $('#list')
      //用于操作小黑点 -->
      var $points = $('#pointsDiv>span')
      //操作两个按键 -->
      var $prev = $('#prev')
      var $next = $('#next')
      var PAGE_WIDTH = 600
      var TIME = 400 //总偏移时间TIME
      var ITEM_TIME = 20 //单元格移动时间
      var imageCount = $points.length //轮播图的有效数量
      var index = 0 //最初索引
      var moving = false //标识是否正在翻页


      //点击监听切换图片 -->
      $prev.click(function () {
        //平滑翻到上一页 -->
        // alert($list.position().left)
        nextPage(false)
      })
      $next.click(function () {
        //< !--平滑翻到下一页 -->
        nextPage(true)
      })
      // 添加点时器实现自动换页
      var change = setInterval(function () {
        nextPage(true)
      }, 2000)
      // 设置鼠标移入移出控制是否自动换页
      $container.hover(function () {
        clearInterval(change)
      }, function () {
        change = setInterval(function () {
          nextPage(true)
        }, 2000)
      })

      //平滑翻页
      function nextPage(next) {
        //判断是否正在执行翻译
        if (moving) {
          return
        }
        moving = true

        // 总偏移量offset判断点击的是prev还是next,用于计算点击后的偏移量
        if (typeof next == 'boolean') {
          var offset = next ? - PAGE_WIDTH : PAGE_WIDTH //600
        } else {
          offset = -(next - index) * PAGE_WIDTH
        }
        //总偏移时间TIME,单元移动时间ITEM_TIME
        //单元移动距离:itemOffset = PAGE_WIDTH/(TIME/ITEM_TIME)
        // 获取当前的偏移量
        var currentLeft = Math.floor($list.position().left)//这里有问题不是整数
        // alert(currentLeft)
        //目标偏移量
        var targetLeft = currentLeft + offset
        //一节偏移量
        var itemOffset = offset / (TIME / ITEM_TIME)
        var ding = setInterval(function () {
          currentLeft += itemOffset //每次多偏移一节
          // 当currentLeft == targetLeft时,说明itemOffet递增的值等于了offset,到达了目标偏移位置
          if (currentLeft == targetLeft) {
            if (currentLeft == -(imageCount + 1) * PAGE_WIDTH) {
              currentLeft = -PAGE_WIDTH
            } else if (currentLeft == 0) {
              currentLeft = -imageCount * PAGE_WIDTH
            }
            clearInterval(ding)

            //翻页停止
            moving = false
          }
          $list.css('left', currentLeft)
        }, ITEM_TIME)
        //更新圆点
        undatePoints(next)
      }
      function undatePoints(next) {
        //计算出目标圆点的下标
        //因为有效图片和实际放入的图片数量有差别,所以应该考虑targetIndex等于-1和imageCount的情况
        var targetIndex = 0
        if (typeof next == 'boolean') {
          if (next) {
            targetIndex = index + 1
            if (targetIndex == imageCount) {
              targetIndex = 0
            }
          } else {
            targetIndex = index - 1
            if (targetIndex == -1) {
              targetIndex = imageCount - 1
            }
          }
        } else {
          targetIndex = next
        }
        //将当前index的span标签上的class移除
        $points.eq(index).removeClass('on')
        // $points[index].className = ''//这是原生js的方式
        //给目标圆点添加
        $points.eq(targetIndex).addClass('on')
        //为index指定新的值
        index = targetIndex
      }
      //点击圆点翻页
      $points.click(function () {
        //目标页的下标
        var targetIndex = $(this).index()
        //只有当点击的不是当前页的圆点时才翻页
        if (targetIndex != index) {
          nextPage(targetIndex)
        }
      })


    })</script>

相关文章

  • 项目-轮播图

    整个轮播图分为三部分:轮播指标、轮播项目及轮播导航。用boostrap实现轮播图要比用js、jQuery方便的多,...

  • jquery代码实现爱奇艺轮播图效果

    爱奇艺轮播图效果的jquery代码实现。 html部分: css部分: jquery部分:

  • 用js原生实现轮播图

    用jquery实现轮播图非常简单的啦!有没有想过用原生js实现轮播图呢???今天琢磨了一下,摸索出来一个,就和大家...

  • jQuery轮播图实现

    html: 备注:图片width:730px height:454px css: @charset "utf-8"...

  • jQuery实现轮播图

    题目1: 轮播的实现原理是怎样的?如果让你来实现,你会抽象出哪些函数(or接口)供使用?(比如 play()) 轮...

  • 2018-07-30

    Jquery和纯JS实现轮播图(一)--左右切换式 一、页面结构 对于左右切换式的轮播图的结构主要分为以下几个部分...

  • web常用库

    js retina.js 实现retina屏幕图片自动替换 slick.js jQuery插件,实现各种轮播图 w...

  • Vue轮播图的实现以及其与jQuery轮播图的简单对比

    最近在学习Vue,然后做了一个轮播图,然后想起之前用jQuery做的轮播图,就打算进行一个对比。 jQuery轮播...

  • jQuery相关插件

    jQuery全屏滚动插件fullPage.js jquery轮播图插件unslider

  • Jquery和纯JS实现轮播图--淡入淡出切换式

    今天分享一下淡入淡出式的轮播图,同样也是用纯js和Jquery两种方法来实现:JQUERY实现HTML结构: CS...

网友评论

      本文标题:jQuery实现轮播图

      本文链接:https://www.haomeiwen.com/subject/henumktx.html