最近其他项目不是很忙,被安排给公司的官网项目做一个新的页面(之前没接触公司官网项目),其中有一个用到轮播图的地方,最开始想直接用swiper.js插件实现就好了,可是发现官网项目里之前都没有引入过swiper.js,后来想了想,就不引入它了,免得又得增加依次一次网络请求,项目里既然已经用到了jQuery,那就索性用jQuery写一个轮播图吧。

  最近其他项目不是很忙,被安排给公司的官网项目做一个新的页面(之前没接触公司官网项目),其中有一个用到轮播图的地方,最开始想直接用swiper.js插件实现就好了,可是发现官网项目里之前都没有引入过swiper.js,后来想了想,就不引入它了,免得又得增加依次一次网络请求,项目里既然已经用到了jQuery,那就索性用jQuery写一个轮播图吧。

  现在把自己写的轮播图这块代码单独拿出来,做一个小demo写在这里记录一下(demo中轮播图的图片网上随意找的)

  实现的效果:

    1、自动轮播(轮播时间间隔在js代码中自定义)

    2、点击左右侧按钮,实现手动切换

    3、底部小圆点根据切换图片的位置相应的显示active状态

    4、鼠标经过轮播图区域,停止轮播,离开轮播图区域开始轮播

 

代码目录结果如下:

 

注:这里以5张图片为例,页面上真正轮播展示给用户看到的是5张不同的图片,但是为了轮播效果的连贯性,所以在第一张图片前面添加上第五张图片,在第五张图片后面加上了第一张图片,所以demo结构里是7张图片,每张图片的尺寸必须都是一样的哦(这里宽高尺寸是720*350px)。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>PC-jquery版轮播图</title>
  6. <link rel="stylesheet" href="css/style.css">
  7. </head>
  8. <body>
  9. <div class="layout">
  10. <h2 style="text-align: center;">PC-jquery版轮播图</h2>
  11. <div class="slide" id="slide">
  12. <div id="outer" class="outer">
  13. <ul id="inner" class="inner">
  14. <li><a href="http://www.baidu.com"><p>图片-5</p><img src="images/slide-5.jpg"></a></li>
  15. <li><a href="http://www.baidu.com"><p>图片-1</p><img src="images/slide-1.jpg"></a></li>
  16. <li><a href="http://www.baidu.com"><p>图片-2</p><img src="images/slide-2.jpg"></a></li>
  17. <li><a href="http://www.baidu.com"><p>图片-3</p><img src="images/slide-3.jpg"></a></li>
  18. <li><a href="http://www.baidu.com"><p>图片-4</p><img src="images/slide-4.jpg"></a></li>
  19. <li><a href="http://www.baidu.com"><p>图片-5</p><img src="images/slide-5.jpg"></a></li>
  20. <li><a href="http://www.baidu.com"><p>图片-1</p><img src="images/slide-1.jpg"></a></li>
  21. </ul>

           <!--底部小圆点-->
  22. <ol class="dot" id="dot">
  23. <li class="active"></li>
  24. <li></li>
  25. <li></li>
  26. <li></li>
  27. <li></li>
  28. </ol>
  29. </div>
  1.      <!--左右两侧的点击切换按钮-->
  2. <div class="arrow-box">
  3. <div class="arrow arrow-l" id="arrow_l"></div>
  4. <div class="arrow arrow-r" id="arrow_r"></div>
  5. </div>
  6. </div>
  7. </div>
  8.  
  9. <script src="js/jquery.min.js"></script>
  10. <script src="js/index.js"></script>
  11. </body>
  12. </html>

 

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. .layout {
  7. width: 1000px;
  8. margin: 30px auto;
  9. }
  10. ul,ol,li {
  11. list-style: none;
  12. }
  13. .slide {
  14. position: relative;
  15. width: 900px;
  16. margin:auto;
  17. }
  18. .slide .outer {
  19. position: relative;
  20. margin: 30px auto;
  21. width: 720px;
  22. height: 400px;
  23. overflow: hidden;
  24. }
  25. .slide .outer .inner {
  26. width: 5040px;
  27. height: 350px;
  28. position: absolute;
  29. left: -720px;
  30. top: 0;
  31. }
  32. .slide .outer .inner li {
  33. float: left;
  34. height: 350px;
  35. }
  36. .slide .outer .inner li a {
  37. display: block;
  38. position: relative;
  39. width: 100%;
  40. height: 100%;
  41. }
  42. .slide .outer .inner li a p {
  43. position: absolute;
  44. left: 0;
  45. bottom: 0;
  46. color: #fff;
  47. font-size: 18px;
  48. width: 720px;
  49. height: 80px;
  50. line-height: 80px;
  51. padding-left: 50px;
  52. background: linear-gradient(180deg,rgba(0,0,0,0), rgba(0,0,0,0.5));
  53. }
  54. .slide .outer .dot {
  55. margin-top: 365px;
  56. text-align: center;
  57. }
  58. .slide .outer .dot li {
  59. height: 6px;
  60. width: 6px;
  61. border-radius: 3px;
  62. background-color: #d2cbcb;
  63. display: inline-block;
  64. margin: 0 3px;
  65. }
  66. .slide .outer .dot li.active {
  67. background-color: #6e5ca5;
  68. }
  69. .slide .arrow-box {
  70. position: absolute;
  71. width: 900px;
  72. height: 60px;
  73. top: 150px;
  74. left: 0;
  75. }
  76. .slide .arrow-box .arrow {
  77. width: 60px;
  78. height: 60px;
  79. line-height: 60px;
  80. text-align: center;
  81. border-radius: 30px;
  82. background-color: #dde2e6;
  83. font-size: 60px;
  84. color: #999;
  85. cursor: pointer;
  86. }
  87. .slide .arrow-box .arrow.arrow-l {
  88. float: left;
  89. }
  90. .slide .arrow-box .arrow.arrow-r {
  91. float: right;
  92. }

 

注:js代码中,每个变量均已给了注释。为了防止快速多次点击,而出现动画不停的现象,这里在每次切换图片的时候先调用stop(false,true)。但是注意在向左侧滚动的时候,滚动到最后一张图图片后,再次切换时就不要用stop(false,true),而是要瞬间定位到第一张图片(其实是dom结构中的第二张)的位置,同样,向右侧滚动时,当滚动到第一张图片后,再次切换时就不用stop(false,true),而是要瞬间定位到最后一张图片(其实是dom结构中的倒数第二张)的位置。

  1. var interval = 3000; //轮播间隔时间
  2. var arrowL = $(\'#arrow_l\'); //左侧箭头
  3. var arrowR = $(\'#arrow_r\'); //右侧箭头
  4.  
  5. var slideBox = $(\'#slide\'); //轮播图区域
  6. var innerBox = $(\'#inner\'); //内层大盒子
  7. var img = innerBox.children(\'li\'); //每个图片
  8. var dot = $(\'#dot\'); //小圆点盒子
  9.  
  10. var imgW = $(img[0]).outerWidth(); //每个li标签的宽度
  11.  
  12. var imgCount = 5; //总图片个数(不同图片的个数)(实际dom上是有7张)
  13. var i = 0; //初始化为第0张图片
  14. timer = null; //定时器
  15.  
  16. //自动轮播
  17. timer = setInterval(function () {
  18. i++;
  19. innerBox.stop(false, true).animate({\'left\':-i*imgW+\'px\'},300)
  20. dot.find(\'li\').removeClass(\'active\').eq(i-1).addClass(\'active\')
  21. if(i > imgCount){
  22. innerBox.animate({\'left\':-1*imgW+\'px\'},0);
  23. dot.find(\'li\').removeClass(\'active\').eq(0).addClass(\'active\')
  24. i = 1;
  25. }
  26. },interval)
  27. //点击右侧箭头,播放下一张
  28. arrowR.click(function () {
  29. i++;
  30. innerBox.stop(false, true).animate({\'left\':-i*imgW+\'px\'},300)
  31. dot.find(\'li\').removeClass(\'active\').eq(i-1).addClass(\'active\')
  32. if(i > imgCount){
  33. innerBox.animate({\'left\':-1*imgW+\'px\'},0);
  34. dot.find(\'li\').removeClass(\'active\').eq(0).addClass(\'active\')
  35. i = 1;
  36. }
  37. })
  38. //点击左侧箭头,播放上一张
  39. arrowL.click(function () {
  40. i--;
  41. innerBox.stop(false, true).animate({\'left\':-i*imgW+\'px\'},300)
  42. dot.find(\'li\').removeClass(\'active\').eq(i-1).addClass(\'active\')
  43. if(i < 1){
  44. innerBox.animate({\'left\':-imgCount*imgW+\'px\'},0);
  45. dot.find(\'li\').removeClass(\'active\').eq(imgCount-1).addClass(\'active\')
  46. i = imgCount;
  47. }
  48. })
  49. //鼠标经过轮播图区域时,清除定时器,停止自动轮播
  50. slideBox.mouseenter(function () {
  51. clearInterval(timer);
  52. })
  53. //鼠标离开轮播图区域时,重新启动自动轮播
  54. slideBox.mouseleave(function () {
  55. timer = setInterval(function () {
  56. i++;
  57. innerBox.stop(false, true).animate({\'left\':-i*imgW+\'px\'},300)
  58. dot.find(\'li\').removeClass(\'active\').eq(i-1).addClass(\'active\')
  59. if(i > imgCount){
  60. innerBox.animate({\'left\':-1*imgW+\'px\'},0);
  61. dot.find(\'li\').removeClass(\'active\').eq(0).addClass(\'active\')
  62. i = 1;
  63. }
  64. },interval)
  65. })

 

 

 注:毕竟是自己写的,多少可能还会存在一些问题,如果有发现问题的,欢迎及时指出来哦。

 

版权声明:本文为libo0125ok原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/libo0125ok/p/8352413.html