当前位置:   article > 正文

Html+Css+JavaScript实现完整的轮播图功能_轮播图怎么制作html

轮播图怎么制作html

概要

这个案例具备常见轮播图完整的功能,大家可以根据自己的需求去修改; 代码可以直接复制运行,需要安装sass

主要功能:

(1)鼠标移入轮播图,左右两边的按钮出现,离开则隐藏按钮;(CSS完成)

(2)点击左侧按钮,图片向右播放一张,右侧按钮同理;

(3)图片播放的同时,下面的小圆圈也会随之变化;

(4)点击小圆圈,播放相应的图片;

(5)鼠标移入小圆圈,播放相应的图片(看需求是要点击还是移入,把click改成mouseenter)

(6)鼠标移出轮播图自动播放图片

(7)鼠标移入轮播图暂停播放图片

页面效果:

大家觉得有帮助的话可以点个赞支持下,谢谢啦~

完整代码:

一、Css样式,使用sass预编译器

  1. <style >
  2. /* 默认样式 */
  3. * {
  4. margin: 0;
  5. padding: 0;
  6. a {
  7. text-decoration: none;
  8. }
  9. li {
  10. list-style: none;
  11. }
  12. }
  13. /* 轮播图盒子 */
  14. .box {
  15. width: 600px;
  16. height: 350px;
  17. margin: 70px auto;
  18. position: relative;
  19. overflow: hidden;
  20. /* 上、下一页 */
  21. .prev,
  22. .next {
  23. opacity: 0;
  24. display: inline-block;
  25. cursor: pointer;
  26. width: 50px;
  27. height: 50px;
  28. position: absolute;
  29. top: 50%;
  30. color: #d2d0d0;
  31. z-index: 33;
  32. text-align: center;
  33. font-size: 40px;
  34. transform: translateY(-25px);
  35. }
  36. /* 上一页不同的属性 */
  37. .prev {
  38. left: 0;
  39. border-radius: 0 25% 25% 0;
  40. }
  41. /* 下一页不同的属性 */
  42. .next {
  43. right: 0;
  44. border-radius: 25% 0 0 25%;
  45. }
  46. /* 图片容器 */
  47. .images {
  48. position: absolute;
  49. top: 0;
  50. left: 0;
  51. width: 1000%;
  52. /* 图片 */
  53. li {
  54. list-style: none;
  55. float: left;
  56. img {
  57. width: 600px;
  58. height: 350px;
  59. }
  60. }
  61. }
  62. /* 小圆点盒子 */
  63. .dots {
  64. position: absolute;
  65. bottom: 10px;
  66. left: 50%;
  67. height: 13px;
  68. transform: translateX(-50%);
  69. background: rgba(255, 255, 255, .3);
  70. border-radius: 7px;
  71. display: flex;
  72. /* 小圆点 */
  73. li {
  74. width: 10px;
  75. height: 10px;
  76. border-radius: 50%;
  77. border-color: white;
  78. background-color: rgb(0, 0, 0, 0.2);
  79. margin: 2px 5px;
  80. cursor: pointer;
  81. }
  82. /* 选择的小圆点 */
  83. .active {
  84. background-color: rgb(247, 243, 243);
  85. }
  86. }
  87. }
  88. /* 鼠标移入盒子显示上、下按钮 */
  89. .box:hover .prev,
  90. .box:hover .next {
  91. opacity: 1;
  92. }
  93. /* 鼠标移入上、下按钮,背景模糊 */
  94. .box .prev:hover,
  95. .box .next:hover {
  96. background-color: rgba(0, 0, 0, 0.2);
  97. }
  98. </style>

二、Html结构

  1. <body>
  2. <div class="box">
  3. <!-- 左箭头 -->
  4. <a href="javascript:;" class="prev"> &lt;</a>
  5. <!-- 右箭头 -->
  6. <a href="javascript:;" class="next"> &gt;</a>
  7. <ul class="images">
  8. <li><a href="#"><img src="./src/assets/00.jpg" alt="轮播图图片"></a></li>
  9. <li><a href="#"><img src="./src/assets/11.jpg" alt="轮播图图片"></a></li>
  10. <li><a href="#"><img src="./src/assets/12.jpg" alt="轮播图图片"></a></li>
  11. <li><a href="#"><img src="./src/assets/13.jpg" alt="轮播图图片"></a></li>
  12. <li><a href="#"><img src="./src/assets/15.jpg" alt="轮播图图片"></a></li>
  13. <li><a href="#"><img src="./src/assets/16.jpg" alt="轮播图图片"></a></li>
  14. </ul>
  15. <ul class="dots">
  16. <!-- li 用js动态生成-->
  17. </ul>
  18. </div>
  19. </body>

三、JavaScript

  1. <script>
  2. /* 功能需求
  3. (1)当鼠标经过轮播图,左右两边的按钮出现,离开则隐藏按钮;(CSS完成)
  4. (2)点击左侧按钮,图片向右播放一张,右侧同理;
  5. (3)图片播放的同时,下面的小圆圈也会随之变化;
  6. (4)点击小圆圈,可以播放相应的图片;
  7. (5)鼠标移入小圆圈,可以播放相应的图片(看需求是要点击还是移入,把click改成mouseenter)
  8. (6)鼠标移出轮播图会自动播放图片
  9. (7)鼠标移入轮播图会暂停播放图片
  10. */
  11. window.addEventListener('load', function () {
  12. // 图片的下标
  13. var slideIndex = 0;
  14. //circle 控制小圆圈的播放
  15. var circle = 0;
  16. //获取小圆圈盒子
  17. var dots = document.querySelector('.dots');
  18. //获取所有图片
  19. var images = document.querySelector('.images');
  20. //获取轮播图容器
  21. var box = document.querySelector('.box')
  22. //获取轮播图容器宽度
  23. var box_width = box.offsetWidth;
  24. //1.获取上、下一页并添加点击事件
  25. var prev = document.querySelector(".prev")
  26. var next = document.querySelector(".next")
  27. //上一页
  28. prev.addEventListener("click", function () {
  29. if (slideIndex == 0) {//已经第一页了,再上一页就该是最后一页
  30. slideIndex = images.children.length - 1
  31. images.style.left = -slideIndex * box_width + 'px';
  32. }
  33. slideIndex--;
  34. animate(images, -slideIndex * box_width)
  35. // 小圆圈跟随一起变化
  36. circle--;
  37. circle = circle < 0 ? dots.children.length - 1 : circle;
  38. //调用函数
  39. circleChange();
  40. });
  41. //下一页
  42. next.addEventListener("click", function () {
  43. if (slideIndex == images.children.length - 1) {//已经最后一页了,再下一页就该是第一页
  44. images.style.left = 0;
  45. slideIndex = 0;
  46. }
  47. slideIndex++;
  48. animate(images, -slideIndex * box_width);
  49. // 小圆圈跟随一起变化
  50. circle++;
  51. if (circle == dots.children.length) {
  52. circle = 0;
  53. }
  54. circleChange();
  55. });
  56. // 2.动态生成小圆圈 有几张图片,就生成几个小圆圈
  57. var dots = document.querySelector('.dots');
  58. for (var i = 0; i < images.children.length; i++) {
  59. //创建一个小li
  60. var li = document.createElement('li');
  61. //记录当前小圆圈的索引号 通过创建自定义属性来做
  62. li.setAttribute('index', i);
  63. dots.appendChild(li);
  64. //小圆圈的排他思想 在生成小圆圈的同时绑定点击事件
  65. li.addEventListener('click', function () {
  66. for (var i = 0; i < dots.children.length; i++) {
  67. dots.children[i].className = ' '; //清空样式
  68. }
  69. this.className = 'active';
  70. //点击小圆圈,移动图片,本质移动的是ul
  71. //ul 的移动距离 就是小圆圈的索引号 * 图片的宽度 注意是负值
  72. // 当我们点击了某个小li 就拿到它的index属性
  73. var index = this.getAttribute('index');
  74. //当我们点击了某个小li 就要把这个小li 的index给slideIndex
  75. slideIndex = index;
  76. circle = index;
  77. animate(images, -slideIndex * box_width);
  78. })
  79. }
  80. //把dots 里面的第一个小li设置类名为 active
  81. dots.children[0].className = 'active';
  82. // 实现滑动到最后一张照片时 可以平滑地过渡到第一张,克隆第一张图片 放在ul最后面,在其后克隆小圆点不会多
  83. var first = images.children[0].cloneNode(true);
  84. images.appendChild(first);
  85. //3.点击小圆圈添加激活样式
  86. function circleChange() {
  87. for (var i = 0; i < dots.children.length; i++) {
  88. dots.children[i].className = '';
  89. }
  90. dots.children[circle].className = 'active';
  91. }
  92. //定时器自动播放3S
  93. var timer = setInterval(function () {
  94. next.click();
  95. }, 3000);
  96. //3.绑定鼠标移入移出事件
  97. //鼠标移入,停止播放,清除计时器
  98. box.addEventListener('mouseenter', function () {
  99. clearInterval(timer);
  100. timer = null;//清除计时器
  101. });
  102. //鼠标离开,轮播图自动切换 相当于点击右箭头
  103. box.addEventListener('mouseleave', function () {
  104. timer = setInterval(function () {
  105. // 手动调用事件
  106. next.click();
  107. }, 3000);
  108. });
  109. //轮播图播放动画
  110. function animate(obj, target, callback) {
  111. //让元素只有一个定时器在执行,需要清除以前的定时器
  112. clearInterval(obj.timer);
  113. obj.timer = setInterval(function () {
  114. var step = (target - obj.offsetLeft) / 10;
  115. step = step > 0 ? Math.ceil(step) : Math.floor(step);
  116. if (obj.offsetLeft == target) {
  117. //停止动画 本质是停止定时器
  118. clearInterval(obj.timer)
  119. //回调函数写到定时器结束位置
  120. if (callback) {
  121. callback();
  122. }
  123. }
  124. //把每次加1这个步长值改为一个慢慢变小的值
  125. obj.style.left = obj.offsetLeft + step + 'px';
  126. }, 15);
  127. }
  128. next.click();
  129. })
  130. </script>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/803778
推荐阅读
相关标签
  

闽ICP备14008679号