当前位置:   article > 正文

Vue过渡transition实现轮播组件

Vue过渡transition实现轮播组件

        轮播组件的使用非常广泛,与前写的swiper不同,这个组件实现的是自动轮播的功能。先上效果图:

        纵向滚动的轮播一般适用于一些信息的滚动展示

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

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

1、Vue过渡组件transition

        简单介绍一下Vue的过渡组件transition,更详细的请看文档

        Vue 提供了 transition 的封装组件,可以在条件渲染(v-if)和条件展示(v-show)时,为任何元素和组件添加进入/离开的过渡效果。列表的过渡使用transition-group组件,使用tag属性来指定呈现的元素。

过渡的类名

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

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、轮播的代码实现

        使用<transition-group>并指定tag="ul"来渲染列表,<li>元素中使用currentIndex === index来判断元素是否展示。<img-scroll-item>组件是轮播的内容,这个例子中就是一张图片。

  1. <div class="acs_img-scroll" v-if="myList && myList.length">
  2. <transition-group
  3. tag="ul"
  4. class='ac_scroll-ul'
  5. name="list"
  6. @after-leave="autoPlay">
  7. <li
  8. class="ac_scroll-item"
  9. v-for="(item, index) in myList"
  10. :key="index"
  11. v-show="currentIndex === index"
  12. @click="click($event, item)">
  13. <img-scroll-item
  14. :scrollItem="filterItem(item)">
  15. </img-scroll-item>
  16. </li>
  17. </transition-group>
  18. </div>

        监测after-leave事件,在元素离开后改变currentIndex的值,来展示下一个元素。

  1. autoPlay() {
  2. setTimeout(() => {
  3. this.currentIndex++;
  4. if (this.currentIndex > this.list.length - 1) {
  5. this.currentIndex = 0;
  6. }
  7. }, 2000);
  8. },

        进入时,元素的偏移从100%过渡到0,离开时,从0过渡到-100%,横向滚动使用translateX,纵向滚动则translateY。

  1. .acs_img-scroll{
  2. height: 100%;
  3. overflow: hidden;
  4. .ac_scroll-ul{
  5. position: relative;
  6. .ac_scroll-item {
  7. position: absolute;
  8. }
  9. .list-enter-to {
  10. transition: all 2s ease;
  11. transform: translateX(0);
  12. }
  13. .list-leave-active {
  14. transition: all 2s ease;
  15. transform: translateX(-100%)
  16. }
  17. .list-enter {
  18. transform: translateX(100%)
  19. }
  20. .list-leave {
  21. transform: translateX(0)
  22. }
  23. }
  24. }

        以上就是全部代码了,非常简单就实现了轮播效果。

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

闽ICP备14008679号