Vue 过渡实现轮播图效果

Vue 过渡

Vue 的过渡系统是内置的,在元素从 DOM 中插入或移除时自动应用过渡效果

过渡的实现要在目标元素上使用 transition 属性,具体实现参考Vue2 过渡

下面例子中我们用到列表过渡,可以先学习一下官方的例子

要同时渲染整个列表,比如使用 v-for,我们需要用到 组件

Vue 轮播图

我们先看这样一个列表

  • 这个列表要从实例(见文章末尾)中获取了三张图片,要使其中的图片产生轮播,我们需要用 组件替换其中的 ul 标签,从而实现过渡组件的功能,完整的组件 DOM 内容如下,下面分段解释一下

    对应的数据结构如下:

    在使用 v-for 时,应给对应的元素绑定一个 key 属性,相当于 index 标识,在 组件中,key 是必须的,这样一个轮播图的 DOM 结构就完成了

    接下来我们看看轮播函数的实现,再来看组件中的 li 元素

    上面通过 v-for 渲染了 li 列表,并在其中插入了包含可点击跳转图片,接下来看看如何实现轮播,轮播图的样式直接在后面给出大家 sass 代码,父元素 ul 设置 position: relative;overflow: hidden 后,li 大小设为和父元素相同,absolute 定位固定在父元素中,要让 li 按照顺序显示,需要用到 v-show 或 v-if 处理,通过 index 值来改变当前显示的 li ,本例 v-show 绑定条件 index===currentIndex,用定时器改变 currentIndex 实现轮播

    实例中的方法

    { this.timer = setInterval(() => { this.autoPlay() },4000) }),go() { this.timer = setInterval(() => { this.autoPlay() },4000) },stop() { clearInterval(this.timer) this.timer = null },change(index) { this.currentIndex = index },autoPlay() { this.currentIndex++ if (this.currentIndex > this.slideList.length - 1) { this.currentIndex = 0 } }

    DOM 中为每个轮播 li 元素绑定事件 @mouseenter="stop" @mouseleave="go" 事件,使轮播鼠标移入时停止,移出时再次开始。

    轮播图现在位置指示,绑定类名 active 改变颜色,绑定 change() 方法,鼠标移到指示点时跳转轮播图

    SEOver="change(index)">

    sass 样式代码

    删除 background-color: #fff; }

    .slide-ul {
    width: 100%;
    height: 100%;
    li {
    position: absolute;
    width: 100%;
    height: 100%;
    img {
    width: 100%;
    height: 100%;
    }
    }
    }

    .carousel-items {
    position: absolute;
    z-index: 10;
    top: 380px;
    width: 100%;
    margin: 0 auto;
    text-align: center;
    font-size: 0;
    span {
    display: inline-block;
    height: 6px;
    width: 30px;
    margin: 0 3px;
    background-color: #b2b2b2;
    cursor: pointer;
    }
    .active {
    background-color: $btn-color;
    }
    }

    滑动动画设置,知识点详见 Vue 教程中的 过渡 css 类名

    .list-leave-active {
    transition: all 1s ease;
    transform: translateX(-100%)
    }

    .list-enter {
    transform: translateX(100%)
    }

    .list-leave {
    transform: translateX(0)
    }

    完整 Vue 实例如下

    { this.timer = setInterval(() => { this.autoPlay() },4000) }) go() { this.timer = setInterval(() => { this.autoPlay() },4000) },stop() { clearInterval(this.timer) this.timer = null },change(index) { this.currentIndex = index },autoPlay() { this.currentIndex++ if (this.currentIndex > this.slideList.length - 1) { this.currentIndex = 0 } } } })

    以上就是 Vue 过渡实现的轮播图,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

    相关文章

    问题现象 elmentui的el-tree数据加载问题,导致第一次加载选中当前节点和高亮当前节点没有生效。 解决方...
    因为刚打开文件,vscode默认是预览状态,如果编辑过之后,就不会有这个问题。 可以通过双击将预览状态接...
    前言 上篇文章我们介绍了国产SM4加密算法的后端java实现方案。没有看过的小伙伴可以看一下这篇文章。 h...
    在项目中引入动态路由时报错 写法: 报错: Module build failed (from ./node_modules/_eslint-loader@2...
    问题产生 在使用babel编译es6时,遇到报错Uncaught ReferenceError: regeneratorRuntime is not define...
    父组件的编写 <a:orgCode=orgCode ></a> 在data里面增加...