美文网首页
VUE轮播图实现过程及踩坑

VUE轮播图实现过程及踩坑

作者: Tauruse | 来源:发表于2020-01-30 13:42 被阅读0次

前言

学习了原生js实现轮播图的过程,看完感觉太麻烦了,正好最近在学习vue,就想试着用vue来实现一遍

参考地址

网上看到别人的例子
VUE离开过渡效果 - 官方文档
提供思路的博客

思路

  1. 原生js实现方式是在li列表最后一张图的后面再复制一个第一张图,然后再最后一张图按下一张的按钮时就可以无缝滑动到第一张,此时再取掉动画效果,改变ul的left值为0即第一张的位置,在用户看来就是回到了第一张图片,从而达到无缝滚动的效果
  2. 由于使用原生js实现的时候是通过改变图片列表的ul的left值,按照这个思路实现了,但是到第一张和最后一张切换的时候不知道怎么实现无缝滚动,如果按照上一条的方式会操作dom,在vue中操作dom还是不太好,所以放弃了;

参考代码:

      <ul
          v-bind:style="{left:currentIndex*-750+'px',
          width:imgs.length*100+'%',
          position:'absolute',
          transition:' all 0.5s ease-in-out'}"
        >
          <li v-for="(items,index) in imgs">
            <transition name="image">
              <img :src="items" />
            </transition>
          </li>
        </ul>

完整代码:在线运行

  1. 最开始想到的是通过控制currentIndex来切换显示,如下代码所示:
        <ul>
            <li :key="currentIndex">
              <img v-bind:src="imgs[currentIndex]"  alt="">
            </li>
        </ul>

但是这样在切换的时候比较生硬,没有动画切换效果,但是最基本的图片切换的目的达到了(参考了网上的一些教程,好多都是停在这一步就没有继续了,那这个教程的意义在哪...)

后来参考网上看到别人的例子使用transition标签,通过控制过渡样式,达到轮播图的效果,代码如下图所示:

        <ul>
          <transition name="image">
            <li :key="currentIndex">
              <img v-bind:src="imgs[currentIndex]"  alt="">
            </li>
          </transition>
        </ul>

css样式:

.image-enter-active,
.image-leave-active {
  transition: all 1s ease-in-out;
}

.image-leave-to {
  transform: translateX(-100%);
}

.image-leave {
  transform: translateX(0);
}

.image-enter-to {
  transform: translateX(-100%);
}

.image-enter {
  transform: translateX(0);
}

这样看起来滑动效果很连贯,而且最后一张到第一张图片的过渡也没有问题,唯一的问题在于如果多次快速点击切换图片按钮会看到很明显的bug,这个问题的解决办法目前还没有想到

该思路的完整代码:在线运行

最后考虑改变过渡的动画样式,最终在视觉上看起来好像是没有问题了,参考代码:

.lunbo ul li {
  position: absolute;
  width: 100%;
}

.lunbo ol li {
  float: left;
  position: relative;
}

...

.image-enter-active,
.image-leave-active {
  transition: all 1s;
}

.image-enter,
.image-leave-active {
  opacity: 0;
}

.image-enter {
  transform: scale(.8, .8)
}

.image-leave-active {
  transform: translateX(-100%);
}

最终成果

在线运行

相关文章

  • VUE轮播图实现过程及踩坑

    前言 学习了原生js实现轮播图的过程,看完感觉太麻烦了,正好最近在学习vue,就想试着用vue来实现一遍 参考地址...

  • vue + element-ui + axios + nedit

    一.新建vue项目 参考我的文章 Vue项目安装到发布流程图 vue npm 搭建项目 流程及备忘及不踩坑 正式开...

  • 小程序-实现swiper轮播图

    之前用小程序自带的swiper,遇到不少坑。 于是乎为了以后少踩坑,顺便练练手,就自己实现了两个轮播图组件。 第一...

  • VUE 脚手架项目中轮播图的实现

    VUE项目中轮播图的实现 vue-awesome-swiper ——依赖插件vue-awesome-swiper...

  • vue-awesome-swiper 踩坑

    前言 网上很多教程在轮播图需要请求后台数据展示的情况下都不好使,下面是我自己踩坑后得出的代码。参考vue的坑 vu...

  • 轮播图实现

    轮播图在实际应用开发使用较多,本文说明一下具体的实现过程。 一、实现轮播图的基本控件介绍。实现轮播图需要将多张图片...

  • 项目-轮播图

    整个轮播图分为三部分:轮播指标、轮播项目及轮播导航。用boostrap实现轮播图要比用js、jQuery方便的多,...

  • 音频播放工具类

    实现音频的播放效果及音频列表播放踩坑,效果图:WX20180130-103857.png 实现: 1.声明 解决在...

  • vue-awesome-swiper实现3d轮播图

    vue-awesome-swiper实现3d轮播图 写了好几个有关vue的移动端的项目,好多轮播样式都是3d的,所...

  • 2019-04-28

    vue 轮播图组件

网友评论

      本文标题:VUE轮播图实现过程及踩坑

      本文链接:https://www.haomeiwen.com/subject/izeithtx.html