vue写轮播组件

淩亂°似流年 2023-02-18 03:18 78阅读 0赞

写轮播组件的思路:
1、确定传入的参数:轮播图的数据(图片地址,跳转href,图片ID,标题等基础数据)、轮询时间
2、写好轮播图的基本样式,父组件传入参数,动态加载进入轮播图基础数据,写点击事件,目标:点击标点的时候,能跳转到对应的图片。
3、使用定时器,轮询图片,目标:能自动播放图片
4、使用css3的过渡,做出向左滑出右边图片进入:目标:图片滑动交替出现
5、完善点击事件,目标:鼠标移入的时候,轮播图停止,鼠标移出后,自动开始轮播

  1. <template>
  2. <div class="slide-show" @mouseover="clearInv" @mouseout="runInv">
  3. <div class="slide-img">
  4. <a :href="slides[nowIndex].href">
  5. <transition name="slide-trans">
  6. <img v-if="isShow" :src="slides[nowIndex].src" >
  7. </transition>
  8. <transition name="slide-trans-old">
  9. <img v-if="!isShow" :src="slides[nowIndex].src" >
  10. </transition>
  11. </a>
  12. </div>
  13. <h2>{
  14. {slides[nowIndex].title}}</h2>
  15. <ul class="slide-pages">
  16. <li @click="goto(prevIndex)"><</li>
  17. <li v-for="(item,index) in slides" :key="item.href" @click="goto(index)">
  18. <a :class="{on: index === nowIndex}">{
  19. {index+1}}</a>
  20. </li>
  21. <li @click="goto(nextIndex)">></li>
  22. </ul>
  23. </div>
  24. </template>
  25. <script>
  26. export default {
  27. name: 'slider',
  28. props: {
  29. //组件的图片相关信息
  30. slides: {
  31. type: Array,
  32. default: []
  33. },
  34. //轮播的时间间隔
  35. inv: {
  36. type: Number,
  37. default: 1000
  38. }
  39. },
  40. data () {
  41. return {
  42. nowIndex: 0,
  43. isShow: true
  44. }
  45. },
  46. computed: {
  47. //获得前一张图片
  48. prevIndex () {
  49. if (this.nowIndex === 0) {
  50. return this.slides.length - 1
  51. }
  52. else {
  53. return this.nowIndex - 1
  54. }
  55. },
  56. //获得下一张图
  57. nextIndex () {
  58. if (this.nowIndex === this.slides.length) {
  59. return 0
  60. }
  61. else {
  62. return this.nowIndex + 1
  63. }
  64. }
  65. },
  66. methods: {
  67. //跳转到任意一页
  68. goto (index) {
  69. this.isShow = false
  70. //10毫秒的延迟,为过渡提供时间
  71. setTimeout(() => {
  72. this.isShow = true
  73. this.nowIndex = index
  74. //可以向父组件发送当前的图片index
  75. this.$emit('onchange', index)
  76. }, 10)
  77. },
  78. //使用定时器定时调用跳转到下一页的函数
  79. //鼠标移入和页面开始时执行定时器
  80. runInv () {
  81. this.invID = setInterval(() => {
  82. this.goto(this.nextIndex)
  83. }, this.inv)
  84. },
  85. //鼠标进入,清除定时器,轮播图停止自动轮播
  86. clearInv () {
  87. clearInterval(this.invID)
  88. }
  89. },
  90. mounted () {
  91. //页面加载完成,启动自动播放轮播图函数
  92. this.runInv()
  93. }
  94. }
  95. </script>
  96. <style scoped>
  97. /* 使用过度写两个图片交替的过程 */
  98. .slide-trans-enter-active {
  99. transition: all .5s;
  100. }
  101. .slide-trans-enter {
  102. transform: translateX(900px);
  103. }
  104. .slide-trans-old-leave-active {
  105. transition: all .5s;
  106. transform: translateX(-900px);
  107. }
  108. .slide-show {
  109. position: relative;
  110. margin: 15px 15px 15px 0;
  111. width: 900px;
  112. height: 500px;
  113. overflow: hidden;
  114. }
  115. .slide-show h2 {
  116. position: absolute;
  117. width: 100%;
  118. height: 100%;
  119. color: #fff;
  120. background: #000;
  121. opacity: .5;
  122. bottom: 0;
  123. height: 30px;
  124. text-align: left;
  125. padding-left: 15px;
  126. }
  127. .slide-img {
  128. width: 100%;
  129. }
  130. .slide-img img {
  131. width: 100%;
  132. position: absolute;
  133. top: 0;
  134. }
  135. .slide-pages {
  136. position: absolute;
  137. bottom: 10px;
  138. right: 15px;
  139. }
  140. .slide-pages li {
  141. display: inline-block;
  142. padding: 0 10px;
  143. cursor: pointer;
  144. color: #fff;
  145. }
  146. .slide-pages li .on {
  147. text-decoration: underline;
  148. }
  149. </style>

发表评论

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

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

相关阅读

    相关 vue组件

    写轮播组件的思路: 1、确定传入的参数:轮播图的数据(图片地址,跳转href,图片ID,标题等基础数据)、轮询时间 2、写好轮播图的基本样式,父组件传入参数,动态加载进

    相关 Vue——图片组件

    Notices: 这是我一个项目中的一个子组件,要展示的数据、图片地址等的都在父组件data中。所以后面的讲述都是基于从父组件获取的参数进行处理。(如需将这个SlideShow