Vue过渡transition实现轮播组件

àì夳堔傛蜴生んèń 2022-05-13 16:40 433阅读 0赞
  1. 轮播组件的使用非常广泛,与前写的swiper不同,这个组件实现的是自动轮播的功能。先上效果图:
  2. 纵向滚动的轮播一般适用于一些信息的滚动展示

70

  1. 横向滚动的轮播一般适用于banner图的变换

70 1

  1. 这种组件写起来也其实也不算复杂,但是用Vuetransition组件会更加简单。

1、Vue过渡组件transition

  1. 简单介绍一下Vue的过渡组件transition,更详细的请看[文档][Link 1]。
  2. Vue 提供了 transition 的封装组件,可以在条件渲染(v-if)和条件展示(v-show)时,为任何元素和组件添加进入/离开的过渡效果。**列表的过渡使用transition-group组件**,使用**tag属性**来指定呈现的元素。

过渡的类名

  1. 在进入/离开的过渡中,会有 6 class 切换:v-enterv-enter-activev-enter-tov-leavev-leave-activev-leave-to。通过为<transition>添加name属性,可以实现自定义的类名。

70 2

JavaScript钩子

  1. <transition
  2. v-on:before-enter="beforeEnter"
  3. v-on:enter="enter"
  4. v-on:after-enter="afterEnter"
  5. v-on:enter-cancelled="enterCancelled"
  6. v-on:before-leave="beforeLeave"
  7. v-on:leave="leave"
  8. v-on:after-leave="afterLeave"
  9. v-on:leave-cancelled="leaveCancelled"
  10. >
  11. <!-- ... -->
  12. </transition>

2、轮播的代码实现

  1. 使用<transition-group>并指定tag="ul"来渲染列表,<li>元素中使用currentIndex === index来判断元素是否展示。<img-scroll-item>组件是轮播的内容,这个例子中就是一张图片。
  2. <div class="acs_img-scroll" v-if="myList && myList.length">
  3. <transition-group
  4. tag="ul"
  5. class='ac_scroll-ul'
  6. name="list"
  7. @after-leave="autoPlay">
  8. <li
  9. class="ac_scroll-item"
  10. v-for="(item, index) in myList"
  11. :key="index"
  12. v-show="currentIndex === index"
  13. @click="click($event, item)">
  14. <img-scroll-item
  15. :scrollItem="filterItem(item)">
  16. </img-scroll-item>
  17. </li>
  18. </transition-group>
  19. </div>
  20. 监测after-leave事件,在元素离开后改变currentIndex的值,来展示下一个元素。
  21. autoPlay() {
  22. setTimeout(() => {
  23. this.currentIndex++;
  24. if (this.currentIndex > this.list.length - 1) {
  25. this.currentIndex = 0;
  26. }
  27. }, 2000);
  28. },
  29. 进入时,元素的偏移从100%过渡到0,离开时,从0过渡到-100%,横向滚动使用translateX,纵向滚动则translateY
  30. .acs_img-scroll{
  31. height: 100%;
  32. overflow: hidden;
  33. .ac_scroll-ul{
  34. position: relative;
  35. .ac_scroll-item {
  36. position: absolute;
  37. }
  38. .list-enter-to {
  39. transition: all 2s ease;
  40. transform: translateX(0);
  41. }
  42. .list-leave-active {
  43. transition: all 2s ease;
  44. transform: translateX(-100%)
  45. }
  46. .list-enter {
  47. transform: translateX(100%)
  48. }
  49. .list-leave {
  50. transform: translateX(0)
  51. }
  52. }
  53. }
  54. 以上就是全部代码了,非常简单就实现了轮播效果。

发表评论

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

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

相关阅读

    相关 vue组件

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

    相关 Vue——图片组件

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