当前位置:   article > 正文

vue轮播图

vue轮播图
  1. <template>
  2. <div id="app">
  3. <div class="SwiperBox" @mouseenter="MouseFun('移入')" @mouseleave="MouseFun('移出')">
  4. <!-- 图片 -->
  5. <img :class="['imgCss', ShowImg == index ? 'ShowCss' : '']" :src="item.image" v-for="(item, index) in imgList"
  6. :key="index" />
  7. <!-- 左箭头按钮 -->
  8. <div class="leftBtn" @click="throttle(PrevFun)">&larr;</div>
  9. <!-- 右箭头按钮 -->
  10. <div class="rightBtn" @click="throttle(NextFun)">&rarr;</div>
  11. <!-- 下方指示点容器 -->
  12. <div class="instBox">
  13. <div v-for="(item, index) in imgList.length" :key="index" @click="ShowImg = index"
  14. :class="['inst', ShowImg == index ? 'instActv' : '']">
  15. </div>
  16. </div>
  17. </div>
  18. </div>
  19. </template>
  20. <script>
  21. import axios from "axios"
  22. export default {
  23. data() {
  24. return {
  25. imgList: [],
  26. currentImageIndex: 0,
  27. ShowImg: 0, // 表示当前显示的图片
  28. flag: true, // 用来节流防止重复点击
  29. start: null, // 自动执行下一张定时器
  30. }
  31. },
  32. mounted() {
  33. var that = this;
  34. axios.get("接口").then((res) => {
  35. that.imgList = res.data.data.list;
  36. });
  37. that.setTimeoFun()
  38. },
  39. methods: {
  40. // 这里定义一个鼠标移入移出事件,鼠标悬停时停止自动轮播,鼠标移出则重新执行自动轮播
  41. MouseFun(type) {// 停止定时器 // 重新执行定时器
  42. type == '移入' ? clearTimeout(this.start) : this.setTimeoFun()
  43. },
  44. setTimeoFun() {
  45. this.start = setInterval(() => {
  46. this.NextFun()
  47. }, 10000)
  48. },
  49. // 这里通过额外封装的节流函数触发 PrevFun() 和 NextFun(),以达到防止重复点击的效果
  50. throttle(fun) {
  51. if (this.flag) {
  52. this.flag = false;
  53. fun(); // 此为模板中传递进来的PrevFun()或NextFun()函数
  54. setTimeout(() => {
  55. this.flag = true;
  56. }, 10000); // 节流间隔时间
  57. }
  58. },
  59. // 上一张
  60. PrevFun() {
  61. if (this.ShowImg !== 0) {
  62. this.ShowImg--
  63. } else {
  64. this.ShowImg = this.imgList.length - 1
  65. }
  66. },
  67. // 下一张
  68. NextFun() {
  69. if (this.ShowImg !== this.imgList.length - 1) {
  70. this.ShowImg++
  71. } else {
  72. this.ShowImg = 0
  73. }
  74. }
  75. }
  76. }
  77. </script>
  78. <style lang="less">
  79. * {
  80. margin: 0;
  81. padding: 0;
  82. }
  83. body,
  84. html {
  85. width: 100%;
  86. height: 100vh;
  87. margin: 0;
  88. padding: 0;
  89. // overflow: hidden;
  90. }
  91. /* 图片容器样式 */
  92. .SwiperBox {
  93. position: relative;
  94. width: 100%;
  95. height: 100vh;
  96. // border: 1px solid #ccc;
  97. box-sizing: border-box;
  98. cursor: pointer;
  99. }
  100. /* 图片默认样式 */
  101. .imgCss {
  102. position: absolute;
  103. left: 0px;
  104. top: 0px;
  105. width: 100%;
  106. height: 100vh;
  107. opacity: 0;
  108. transition: 2s;
  109. /* 淡入淡出过渡时间 */
  110. }
  111. /* 图片选中样式(继承上方默认样式) */
  112. .ShowCss {
  113. opacity: 1;
  114. }
  115. // /* 两个按钮共有的样式,也可直接使用箭头图片替代 */
  116. // .leftBtn,
  117. // .rightBtn {
  118. // position: absolute;
  119. // top: 50%;
  120. // transform: translateY(-50%);
  121. // width: 30px;
  122. // height: 30px;
  123. // display: flex;
  124. // justify-content: center;
  125. // align-items: center;
  126. // background: rgba(109, 109, 109, 0.445);
  127. // color: #fff;
  128. // border-radius: 50%;
  129. // cursor: pointer;
  130. // font-size: 12px;
  131. // font-weight: 500;
  132. // }
  133. // .leftBtn {
  134. // left: 10px;
  135. // }
  136. // .rightBtn {
  137. // right: 10px;
  138. // }
  139. /* 下方指示器盒子 */
  140. .instBox {
  141. position: absolute;
  142. left: 50%;
  143. transform: translateX(-50%);
  144. bottom: 10px;
  145. display: flex;
  146. }
  147. /* 小圆点 */
  148. .inst {
  149. width: 10px;
  150. height: 10px;
  151. border: 1px solid #ccc;
  152. margin-right: 8px;
  153. background: #fff;
  154. border-radius: 50%;
  155. cursor: pointer;
  156. }
  157. .inst:last-child {
  158. margin-right: 0px;
  159. }
  160. .instActv {
  161. border: 1px solid #333;
  162. background: #333;
  163. }
  164. #app {
  165. width: 100%;
  166. height: 100vh;
  167. // padding: 120px;
  168. display: flex;
  169. justify-content: center;
  170. }</style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/251092?site
推荐阅读
相关标签
  

闽ICP备14008679号