原生JS实现简单的轮播图

迷南。 2024-04-18 13:57 146阅读 0赞

注意

我们用原生JS来做一个简单的无缝轮播图,首先需要准备几张图片作为材料,图片的链接需要自己设置,所以这边我的代码中图片链接的位置请大家自己添加图片。

代码

我这边用的是面向对象的写法来做的轮播图

  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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>轮播图</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. #cont {
  14. position: absolute;
  15. left: 0;
  16. }
  17. #cont img {
  18. width: 400px;
  19. height: 300px;
  20. float: left;
  21. }
  22. .box {
  23. overflow: hidden;
  24. width: 400px;
  25. height: 300px;
  26. position: relative;
  27. margin: 10px auto;
  28. }
  29. #left {
  30. position: absolute;
  31. width: 60px;
  32. height: 60px;
  33. background: #ccc;
  34. opacity: .5;
  35. border: 0;
  36. left: 0;
  37. top: 103px;
  38. }
  39. #right {
  40. position: absolute;
  41. width: 60px;
  42. height: 60px;
  43. background: #ccc;
  44. opacity: .5;
  45. border: 0;
  46. right: 0;
  47. top: 103px;
  48. }
  49. </style>
  50. </head>
  51. <body>
  52. <div class="box">
  53. <div id="cont">
  54. <img src="images/bg1.jpg" alt="">
  55. <img src="images/bg2.jpg" alt="">
  56. <img src="images/bg3.jpg" alt="">
  57. <img src="images/bg4.jpg" alt="">
  58. <img src="images/bg5.jpg" alt="">
  59. <img src="images/bg1.jpg" alt=""> <!-- 这里注意要加一个图片达到无缝切换 -->
  60. </div>
  61. <div id="btn">
  62. <input type="button" id="left" value="<<<">
  63. <input type="button" id="right" value=">>>">
  64. </div>
  65. </div>
  66. </body>
  67. <script src="../../../move.js"></script>
  68. <script>
  69. function Top() {
  70. this.cont = document.getElementById("cont");
  71. this.aimg = this.cont.children;
  72. this.left = document.getElementById("left");
  73. this.right = document.getElementById("right");
  74. this.cont.style.width = this.aimg.length * this.aimg[0].offsetWidth + "px";
  75. this.index = 0;
  76. this.init();
  77. }
  78. Top.prototype.init = function () {
  79. //绑定事件
  80. var that = this;
  81. this.right.onclick = function () {
  82. that.rightChange();
  83. }
  84. this.left.onclick = function () {
  85. that.leftChange();
  86. }
  87. }
  88. Top.prototype.leftChange = function () {
  89. //左边的按钮判定,在如果索引在0的时候点击会跳到第五张1,由于最后一张为图片1,所以length-2
  90. if (this.index == 0) {
  91. this.index = this.aimg.length - 2;
  92. this.cont.style.left = -(this.aimg.length - 1) * this.aimg[0].offsetWidth + "px";
  93. console.log(this.index * this.aimg[1].offsetWidth);
  94. } else {
  95. this.index--;
  96. }
  97. this.dispaly()
  98. }
  99. Top.prototype.rightChange = function () {
  100. //计算索引
  101. if (this.index == this.aimg.length - 1) {
  102. this.index = 1;
  103. this.cont.style.left = 0;
  104. } else {
  105. this.index++;
  106. }
  107. this.dispaly()
  108. }
  109. Top.prototype.dispaly = function () {
  110. //这里
  111. move(this.cont, {
  112. left: -this.index * this.aimg[1].offsetWidth
  113. })
  114. }
  115. //下面为调用的两个函数,主要是用来做动画效果
  116. function move(ele,json,callback){
  117. clearInterval(ele.t);
  118. ele.t = setInterval(() => {
  119. var onoff = true;
  120. for(var i in json){
  121. var iNow = parseInt(getStyle(ele,i));
  122. var speed = (json[i] - iNow)/6;
  123. speed = speed<0 ? Math.floor(speed) : Math.ceil(speed);
  124. if(iNow != json[i]){
  125. onoff = false;
  126. }
  127. ele.style[i] = iNow + speed + "px";
  128. }
  129. if(onoff){
  130. clearInterval(ele.t);
  131. callback && callback();
  132. }
  133. }, 30);
  134. }
  135. function getStyle(ele,attr){
  136. if(ele.currentStyle){
  137. return ele.currentStyle[attr];
  138. }else{
  139. return getComputedStyle(ele,false)[attr];
  140. }
  141. }
  142. //执行代码,需要放到最后执行
  143. new Top();
  144. </script>
  145. </html>

发表评论

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

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

相关阅读

    相关 原生JS实现简单

    注意 我们用原生JS来做一个简单的无缝轮播图,首先需要准备几张**图片作为材料**,图片的链接需要自己设置,所以这边我的代码中图片链接的位置请大家自己添加图片。 ...

    相关 原生js实现

    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。 但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。 对IE 8

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [