Vue 过渡

Vue 的过渡系统是内置的,在元素从 DOM 中插入或移除时自动应用过渡效果。
过渡的实现要在目标元素上使用 transition 属性,具体实现参考Vue2 过渡
下面例子中我们用到列表过渡,可以先学习一下官方的例子
要同时渲染整个列表,比如使用 v-for,我们需要用到 <transition-group> 组件
Vue 轮播图
我们先看这样一个列表
<ul> <li v-for="list in slideList"> <img :src="list.image" :alt="list.desc"> </li> </ul>
这个列表要从实例(见文章末尾)中获取了三张图片,要使其中的图片产生轮播,我们需要用 <transition-group> 组件替换其中的 ul 标签,从而实现过渡组件的功能,完整的组件 DOM 内容如下,下面分段解释一下
<div class="carousel-wrap" id="carousel">
// 轮播图列表
<transition-group tag="ul" class='slide-ul' name="list">
<li v-for="(list,index) in slideList" :key="index" v-show="index===currentIndex" @mouseenter="stop" @mouseleave="go">
<a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
<img :src="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}" @mouseover="change(index)"></span>
</div>
</div>
对应的数据结构如下:
data: {
slideList: [
{
"clickUrl": "#",
"desc": "nhwc",
"image": "http://dummyimage.com/1745x492/f1d65b"
},
{
"clickUrl": "#",
"desc": "hxrj",
"image": "http://dummyimage.com/1745x492/40b7ea"
},
{
"clickUrl": "#",
"desc": "rsdh",
"image": "http://dummyimage.com/1745x492/e3c933"
}
],
currentIndex: 0,
timer: ''
},
在使用 v-for 时,应给对应的元素绑定一个 key 属性,相当于 index 标识,在 <transition-group> 组件中,key 是必须的,这样一个轮播图的 DOM 结构就完成了
接下来我们看看轮播函数的实现,再来看组件中的 li 元素
<li v-for="(list,index) in slideList" :key="index"> <a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <img :src="list.image" :alt="list.desc"> </a> </li>
上面通过 v-for 渲染了 li 列表,并在其中插入了包含可点击跳转的图片,接下来看看如何实现轮播,轮播图的样式直接在后面给出大家 sass 代码,父元素 ul 设置 position: relative;overflow: hidden 后,li 大小设为和父元素相同,absolute 定位固定在父元素中,要让 li 按照顺序显示,需要用到 v-show 或 v-if 处理,通过 index 值来改变当前显示的 li ,本例 v-show 绑定条件 index===currentIndex,用定时器改变 currentIndex 实现轮播
<li v-for="(list,index) in slideList" :key="index" v-show="index===currentIndex" @mouseenter="stop" @mouseleave="go"> <a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <img :src="list.image" :alt="list.desc"> </a> </li>
实例中的方法:
//在下个tick执行等待图片加载完成后再
this.$nextTick(() => {
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() 方法,鼠标移到指示点时跳转轮播图
<div class="carousel-items">
<span v-for="(item,index) in slideList.length" :class="{'active':index===currentIndex}" @mouseover="change(index)"></span>
</div>
sass 样式代码
.carousel-wrap {
position: relative;
height: 453px;
width: 100%;
overflow: hidden;
// 删除
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-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)
}
完整 Vue 实例如下
new Vue({
el: '#carousel',
data: {
slideList: [
{
"clickUrl": "#",
"desc": "nhwc",
"image": "http://dummyimage.com/1745x492/f1d65b"
},
{
"clickUrl": "#",
"desc": "hxrj",
"image": "http://dummyimage.com/1745x492/40b7ea"
},
{
"clickUrl": "#",
"desc": "rsdh",
"image": "http://dummyimage.com/1745x492/e3c933"
}
],
currentIndex: 0,
timer: ''
},
methods: {
this.$nextTick(() => {
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 过渡实现的轮播图,希望对大家的学习有所帮助,也希望大家多多支持。
# vue实现轮播
# vue实现轮播图
# vue.js实现轮播
# vue实现自动滑动轮播图片
# Vue+ECharts实现中国地图的绘制及各省份自动轮播高亮显示
# Vue项目中使用better-scroll实现一个轮播图自动播放功能
# vue-music 使用better-scroll遇到轮播图不能自动轮播问题
# 使用Vue制作图片轮播组件思路详解
# 基于vue.js实现图片轮播效果
# 基于vue.js轮播组件vue-awesome-swiper实现轮播图
# vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
# vue中引用swiper轮播插件的教程详解
# Vue实现首页banner自动轮播效果
# 绑定
# 鼠标
# 这样一个
# 跳转
# 设为
# 并在
# 要在
# 数据结构
# 再来
# 来看看
# 要让
# 在后面
# 移到
# 下个
# 要使
# 先看
# 需要用
# 大家多多
# 三张
# 中为
相关文章:
高防服务器租用指南:配置选择与快速部署攻略
建站之星各版本价格是多少?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星如何取消后台验证码生成?
如何在阿里云虚拟主机上快速搭建个人网站?
已有域名和空间如何搭建网站?
网站制作员失业,怎样查看自己网站的注册者?
建站之星在线客服如何快速接入解答?
如何访问已购建站主机并解决登录问题?
网站网页制作专业公司,怎样制作自己的网页?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
临沂网站制作公司有哪些,临沂第四中学官网?
,sp开头的版面叫什么?
清除minerd进程的简单方法
建站之星2.7模板快速切换与批量管理功能操作指南
网站图片在线制作软件,怎么在图片上做链接?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
建站之星代理商如何保障技术支持与售后服务?
建站主机功能解析:服务器选择与快速搭建指南
建站之星展会模版如何一键下载生成?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
小型网站制作HTML,*游戏网站怎么搭建?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站之星后台管理:高效配置与模板优化提升用户体验
兔展官网 在线制作,怎样制作微信请帖?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
建站之星官网登录失败?如何快速解决?
C++中引用和指针有什么区别?(代码说明)
个人网站制作流程图片大全,个人网站如何注销?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何挑选优质建站一级代理提升网站排名?
建站之星导航如何优化提升用户体验?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何选购建站域名与空间?自助平台全解析
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
建站之星安装后如何自定义网站颜色与字体?
如何自定义建站之星网站的导航菜单样式?
如何快速搭建安全的FTP站点?
ppt制作免费网站有哪些,ppt模板免费下载网站?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
建站之星微信建站一键生成小程序+多端营销系统
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
长沙做网站要多少钱,长沙国安网络怎么样?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
建设网站制作价格,怎样建立自己的公司网站?
如何在香港服务器上快速搭建免备案网站?
如何快速上传自定义模板至建站之星?
企业微网站怎么做,公司网站和公众号有什么区别?
网页设计与网站制作内容,怎样注册网站?
如何快速生成凡客建站的专业级图册?
*请认真填写需求信息,我们会在24小时内与您取得联系。