使用vue的v-show和transition制作一个简单轮播图

摘要:
˂!
<template>
<!--轮播图-->
<div id="carousel">
<transition-group tag="ul" :name="transitionName">
<li v-for="(list,index) in slideList" :key="index" v-show="index===currentIndex" @mouseenter="stop" @mouseleave="go">
<a :href="http://t.zoukankan.com/list.clickUrl" rel="nofollow">
<img :src="http://t.zoukankan.com/list.image" :alt="list.desc">
</a>
</li>
</transition-group>
<div class="carousel-items">
<span v-for="(item,index) in slideList.length" :class="{'active':index===currentIndex}" @click="change(index)"></span>
</div>
</div>
</template>

<script>
export default{
data () {
return{
slideList: [
{
"clickUrl": "#",
"desc": "nhwc",
"image": ""
},
{
"clickUrl": "#",
"desc": "hxrj",
"image": ""
},
{
"clickUrl": "#",
"desc": "rsdh",
"image": ""
}
],
currentIndex: 0,
timer: '',
transitionName: 'list'
}
},
mounted () {
this.$nextTick(() => {
this.timer = setInterval(() => {
this.autoPlay()
},3000)
})
},
methods: {
go() {
this.timer = setInterval(() => {
this.autoPlay()
},3000)
},
stop() {
clearInterval(this.timer)
this.timer = null
},
change(index) {
this.stop()
this.go()
if (this.currentIndex > index) {
this.transitionName = 'back'
}else if (this.currentIndex < index) {
this.transitionName = 'list'
}
this.currentIndex = index
},
autoPlay() {
this.currentIndex++
this.transitionName = 'list'
if (this.currentIndex > this.slideList.length - 1) {
this.currentIndex = 0
}
}
}
}
</script>

<style>
.carousel-wrap {
position: relative;
height: 453px;
100%;
overflow: hidden;
background-color: #fff;
}
.slide-ul {
100%;
height: 100%;
}
.slide-ul li {
position: absolute;
100%;
height: 100%;
overflow: hidden;}
.slide-ul img {
100%;
height: 100%;
}
.carousel-items {
position: absolute;
z-index: 10;
top: 380px;
100%;
margin: 0 auto;
text-align: center;
font-size: 0;}
.carousel-items span {
display: inline-block;
height: 6px;
30px;
margin: 0 3px;
background-color: #b2b2b2;
cursor: pointer;
}
.carousel-items .active {
background-color: #00bbdd;
}
/*动画效果向左进入,向左离开 100至0,0至-100*/
.list-enter-active {
transition: all 1s ease;
transform: translateX(0)
}
.list-leave-active {
transition: all 1s ease;
transform: translateX(-100%)
}
.list-enter {
transform: translateX(100%)
}
.list-leave {
transform: translateX(0)
}
/*动画效果向右进入,向左离开 -100至0,100至0*/
.back-enter-active {
transition: all 1s ease;
transform: translateX(0)
}
.back-leave-active {
transition: all 1s ease;
transform: translateX(100%)
}
.back-enter {
transform: translateX(-100%)
}
.back-leave {
transform: translateX(0%)
}
</style>

免责声明:文章转载自《使用vue的v-show和transition制作一个简单轮播图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页RC微积分电路原理与特性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue使用videojs控制后台m3u8数据请求

关于Video.js的使用方法就不再说了,有兴趣的请迁跃:https://videojs.com/ VideoJS中并没有stop之类控制后台数据请求的参数,只有暂停 video.pause()方法 ,但是对于后台的请求是不会暂停的,如果我页面有多个Vedio实例需要存在,这样就太影响页面效率了 我使用的是Vue 组件化的VedioJS控件 1、动态控...

在vue中使用lang="scss"出现报错解决思路

最近在学习vue框架,使用lang="scss" 出现如下错误: This dependency was not found: * !!vue-style-loader!css-loader?{"minimize":false,"sourceMap":false}!../../node_modules/vue-loader/lib/style-comp...

Vue日历控件

<html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible"content="IE=edge"> <title>测试</title> <!--引入样式 -->...

Vue 返回上一页,记住上一页的数据

问题:在搜索页面,搜索出饼干商品,点击某饼干商品进入商品详情页,再从商品详情页返回到搜索页面后, 搜索页面应该依旧保留之前的搜索结果。 解决方式 ==============搜索页面路由设置=================================== {// 搜索path: 'search',name: 'search',component:...

修改ElementUI的样式----vue如何控制步骤条steps圆圈的大小 data-v-

1、问题 使用 vue 时写发现某些样式不生效,怎么都不生效, 不过将style 中的 scoped 去掉后,居然生效了。但是一般都应该加上scoped,那该如何处理呢? <template> <div class="app-container"> <heads /> <div c...

Vue.js 源码分析(二十七) 高级应用 异步组件 详解

当我们的项目足够大,使用的组件就会很多,此时如果一次性加载所有的组件是比较花费时间的。一开始就把所有的组件都加载是没必要的一笔开销,此时可以用异步组件来优化一下。 异步组件简单的说就是只有等到在页面里显示该组件的时候才会从服务器加载,不显式的话就不会加载,这样即可提高客户端的访问速度也可以降低对服务器的请求次数,可谓优化的一个利器。 异步组件常用有3种异步...