js无缝轮播图(手动轮播+自动轮播+定时器+过渡动画)

喜欢ヅ旅行 2022-11-25 10:20 536阅读 0赞

为了方便大家使用,我把Html,CSS,以及js 和用到图片都放在下面了。**

特此说明:这个无缝轮播的代码是可以直接复制粘贴使用,嘻嘻!

1.先新建一个文件,随意命名即可。
2.然后打开文件夹,再新建。
3.把文章底部的5张图片保存到images文件夹里面。
4.用你的编辑器打开这个文件夹
5.剩下的就是复制粘贴到对应的里面就可以了
在这里插入图片描述
Html和Css
这里再说一下我是直接把css样式直接写在了style里面,这个没有引入,js的代码比较长,直接外部引入的js,就是这两句

  1. <script src="无缝轮播.js"></script>
  2. <script src="animate.js"></script>

Html和Css代码在这里开始

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="无缝轮播.js"></script>
  8. <script src="animate.js"></script>
  9. <style>
  10. * {
  11. padding: 0;
  12. margin: 0;
  13. list-style: none;
  14. }
  15. .banner {
  16. position: relative;
  17. width: 1000px;
  18. height: 428px;
  19. margin: 100px auto;
  20. cursor: pointer;
  21. /* overflow: hidden; */
  22. }
  23. .banner .ul {
  24. position: absolute;
  25. height: 428px;
  26. }
  27. .banner .ul img {
  28. float: left;
  29. width: 1000px;
  30. height: 428px;
  31. }
  32. .left,
  33. .right {
  34. position: absolute;
  35. top: 50%;
  36. width: 50px;
  37. height: 50px;
  38. font-size: 40px;
  39. margin-top: -25px;
  40. color: #fff;
  41. cursor: pointer;
  42. text-align: center;
  43. line-height: 40px;
  44. display: none;
  45. /* right: 10px;
  46. left: 10px; */
  47. }
  48. .left:hover,
  49. .right:hover {
  50. color: #ff6700;
  51. background-color: #eee;
  52. }
  53. .banner .left {
  54. left: 10px;
  55. }
  56. .banner .right {
  57. right: 10px;
  58. }
  59. .curcle {
  60. position: absolute;
  61. right: 0;
  62. bottom: 5px;
  63. }
  64. .curcle li {
  65. float: left;
  66. width: 10px;
  67. height: 10px;
  68. border: 3px solid #333;
  69. border-radius: 50%;
  70. color: #000;
  71. background-color: #fff;
  72. margin: 5px;
  73. cursor: pointer;
  74. }
  75. .curcle .select {
  76. float: left;
  77. width: 10px;
  78. height: 10px;
  79. border: 3px solid #fff;
  80. border-radius: 50%;
  81. color: #000;
  82. background-color: #ff6700;
  83. margin: 5px;
  84. cursor: pointer;
  85. }
  86. </style>
  87. </head>
  88. <body>
  89. <div class="banner">
  90. <div class="ul">
  91. <img src="images/1.jpg" alt="">
  92. <img src="images/2.jpg" alt="">
  93. <img src="images/3.jpg" alt="">
  94. <img src="images/4.jpg" alt="">
  95. <img src="images/5.jpg" alt="">
  96. </div>
  97. <div class="curcle"></div>
  98. <div class="left"></div>
  99. <div class="right"></div>
  100. </body>
  101. </html>

这里就是js的代码了,一共两个,一个叫无缝轮播.js,另一个叫animate.js

无缝轮播.js

  1. window.onload = function () {
  2. console.log(111);
  3. var banner = document.querySelector(".banner");
  4. var bannerWidth = banner.offsetWidth;
  5. console.log(bannerWidth);
  6. var imgs = document.querySelectorAll(".ul img");
  7. var uls = document.querySelector(".banner .ul");
  8. var newImg = imgs[0].cloneNode(true);
  9. console.log(imgs[0].offsetWidth);
  10. uls.appendChild(newImg);
  11. var left = document.querySelector(".left");
  12. var right = document.querySelector(".right");
  13. banner.onmouseenter = function () {
  14. left.style.display = "block";
  15. right.style.display = "block";
  16. }
  17. banner.onmouseleave = function () {
  18. left.style.display = "none";
  19. right.style.display = "none";
  20. }
  21. var curcle = document.querySelector(".curcle");
  22. for (var i = 0; i < imgs.length; i++) {
  23. // console.log(imgs.length);
  24. // 动态创建小圆点
  25. var lis = document.createElement("li");
  26. curcle.appendChild(lis);
  27. //给底部的小圆点添加点击效果
  28. // lis.className = "select";
  29. // 动态修改长度
  30. // var uls = document.querySelector(".banner .ul");
  31. uls.style.width = (imgs.length + 1) * 1000 + "px";
  32. }
  33. var lis = document.querySelectorAll(".curcle li");
  34. console.log(lis);
  35. for (var i = 0; i < lis.length; i++) {
  36. lis[0].className = "select";
  37. lis[i].index = i;
  38. lis[i].onclick = function () {
  39. console.log(this.index);
  40. document.querySelector(".select").className = "";
  41. // lis[i].className = "";
  42. this.className = "select";
  43. // var bannerWidth = banner.offsetWidth;
  44. // console.log(bannerWidth);
  45. // animate(ul, -index *)
  46. // var uls = document.querySelector(".banner .ul");
  47. animate(uls, -this.index * bannerWidth);
  48. // console.log(-this.index * imgs[0].offsetWidth);
  49. }
  50. }
  51. //点击右侧按钮,实现图片的滚动
  52. var num = 0;
  53. var circle = 0;
  54. //设置节流阀
  55. var flag = true;
  56. right.addEventListener('click', function () {
  57. console.log(num);
  58. if (num == imgs.length) {
  59. uls.style.left = 0;
  60. num = 0;
  61. }
  62. num++;
  63. animate(uls, -num * bannerWidth);
  64. circle++;
  65. if (circle == imgs.length) {
  66. circle = 0;
  67. }
  68. circleChange();
  69. });
  70. //点击左侧按钮,实现图片的滚动
  71. left.addEventListener('click', function () {
  72. console.log(num);
  73. if (num == 0) {
  74. num = imgs.length;
  75. uls.style.left = -(num) * bannerWidth + "px";
  76. }
  77. num--;
  78. animate(uls, -num * bannerWidth);
  79. circle--;
  80. if (circle < 0) {
  81. circle = imgs.length - 1;
  82. }
  83. circleChange();
  84. });
  85. function circleChange() {
  86. for (var i = 0; i < imgs.length; i++) {
  87. lis[i].className = "";
  88. }
  89. lis[circle].className = "select";
  90. };
  91. //10定时器
  92. var time = setInterval(function () {
  93. right.click();
  94. }, 2000);
  95. uls.onmouseenter = function () {
  96. clearInterval(time);
  97. }
  98. uls.onmouseleave = function () {
  99. time = setInterval(function () {
  100. right.click();
  101. }, 2000);
  102. }
  103. }

ainimate.js

  1. function animate(element,position){
  2. // 每次进来先把之前的定时器清空
  3. clearInterval(element.time);
  4. element.time = setInterval(function(){
  5. // 现获取这个标签所在的位置
  6. var current = element.offsetLeft;
  7. var step = current > position ? -10 :10;
  8. // 现在的位置和⽬标位置的差值⼩于 每次移动的距离 直接到达⽬标
  9. if (Math.abs(current - position)>step) {
  10. // 还需要接着⾛step
  11. element.style.left = current + step +"px";
  12. }else{
  13. // 如果⾛到最后⼀步 就直接让元素 到达⽬标
  14. element.style.left = position + "px";
  15. clearInterval(element.time);
  16. }
  17. },5)
  18. }

下面是用到的轮播图片以及我的样式目录
1.jpg
1.jpg
2.jpg
在这里插入图片描述
3.jpg
在这里插入图片描述
4.jpg
在这里插入图片描述
5.jpg
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,536人围观)

还没有评论,来说两句吧...

相关阅读