【译】如何使用Vue过渡效果来提升用户体验
在Vue应用中添加过渡效果是一个可以使你的项目感觉更专业的简单方法。通过提升用户体验,可以使你的网站留住更多的用户以及提高转化率。
只需要简单的处理就可以获得巨大的回报,何乐而不为?
在这个指南中,我们将带你了解关于Vue过渡效果的相关知识,从最基本的开箱即用的方法到创建自定义过渡效果。
准备好开始学习关于Vue的过渡了吗?让我们开始吧。
为什么还要使用过渡效果
大部分人会觉得过渡效果只是一种装饰,但是一个具有好的设计的过渡效果可以达到以下一些作用:
- 吸引用户的注意力
- 强调重要的信息
- 网站更加自然流畅
- 引导用户浏览你的网页
- 有助于创造更专业的品牌形象
以上所有的点可以很好地提升网站的用户体验以及提高转化率。双赢。
OK,现在我们知道了过渡效果对你的网站是极其的有帮助,让我们学习如果用Vue来实现这种效果吧。
创建一个Vue过渡效果
为了容纳广泛不同技术栈的开发者,VueJS提供了几种方法来实现过渡:
- 在CSS过渡和动画应用class
- 在过渡钩子函数使用JS实现操作DOM
- 使用第三方CSS/JS库
要使用以上哪一种方式取决于你现有的技术知识。如果是有更好的HTML/CSS经验,那你可以使用第一种。如果你是从React转过来的或者只有更多的JS经验,手动地操作DOM也是一个好的方式。
现在我们重点介绍使用CSS编写单个元素的动画效果。不过请放心,我们后续将介绍更高级的内容(多个元素,动态组建、例子)。
了解过渡组件
transition元素是一个容器,可以帮助你在元素上添加过渡功能。本质上,它设置了不同的函数钩子以及在变化的元素中添加calss,因此我们可以在不同的过渡阶段设置样式。
有6种不同的过渡class(3个进入的,3个离开的类),分别是:
1、v-enter/v-leave:过渡的开始状态;过渡离开开始状态。
2、v-enter-active/v-leave-active:过渡激活状态。
3、v-enter-to/v-leave-to:过渡结束状态。
详细可参考官方文档
提示:当你对过渡定义一个名称,这就是默认的名称。类名的格式为name-enter,name-enter-active等等。
下面我们看下添加过渡的简单方式。
格式化模版的代码非常简单。只需要将需要过渡效果的元素用组件包裹起来即可。就像这样:
<template>
<div>
<button @click='visible = !visible'>Toggle Div</button>
<transition name="fade">
<div v-if="visible">
Hello World
</div>
</transition>
</div>
</template>
<script>
export default {
data () {
return {
visible: true
}
}
}
</script>
很简单,对吧?
现在,我们需要添加一些样式来实现真正的过渡效果了。
我们使用官方文档例子的一些样式:
<style lang="scss">
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
以上代码是做了什么?其实这个很直观,因为加了一些类似状态的类名。
这些样式说明当过渡激活的时候,对opacity属性添加过渡,使其平滑地变化。
然后,设置过渡进入开始状态和过渡离开的结束状态为零(不可见)。同时,要记住当元素没有设置fade-enter或者fade-leave-to类名,opacity将会设置回默认值。
好了。
可以在你的Vue应用里添加过渡效果了。现在,我们来继续深入,了解更多细节。
另外,你也可以使用CSS动画来实现过渡效果。
只有你能够使用合适的类名,就可以根据自己的喜好对这些组件进行样式设置。
下面来看看过渡效果的更高级用法。
在组件加载后使用过渡效果
超级简单,只需要在过渡元素添加一个appear属性即可,像这样:
<transition name="fade" appear>
<div v-if="visible">
Hello World
</div>
</transition>
多个元素使用过渡效果
同样地,这个也是超级简单。像下面那样两个div之间切换。
<transition name="fade" appear>
<div v-if="visible">
Option A
</div>
<div v-else>
Option B
</div>
</transition>
你所需要做的就是用transition元素将这些元素包裹起来,过渡效果就可以生效。
但需要注意以下几点:
当在两个元素之间应用Vue过渡效果时,有时两个元素都是可见的并且正在移入/移出。如果要达到一个平滑的效果,你可能需要将它们绝对定位在彼此的顶部。
如果元素具有相同的标签,Vue会进行优化而且只替换元素的内容,而不是重新销毁创建。根据官方文档,如果需要在多个元素之间进行转换,最佳实践就是在元素上添加一个key。
动态组件使用过渡效果
这个相对于上面的例子更加简单了。只需要把动态组件放在transition元素里面就可以了。例如:
<transition name="fade" appear>
<component :is='componentType' />
</transition>
创建一个可重用的过渡组件
使用slot创建一个可替换内容的组件,例如:
<template>
<transition name="fade" appear>
<slot></slot>
</transition>
</template>
最后
没什么好说的。Happpy Coding。
后记
以上译文仅用于学习交流,水平有限,难免有错误之处,敬请指正。
参考
【译】如何使用Vue过渡效果来提升用户体验的更多相关文章
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...
- paip.提升用户体验--radio图片选择器 easyui 实现..
#paip.提升用户体验--radio图片选择器 easyui 实现.. =================================== ##原因... ------------------- ...
- paip.提升用户体验--提升java的热部署热更新能力
paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力 "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...
- paip.提升用户体验----gcc c++ JIT-debugging 技术
paip.提升用户体验----gcc c++ JIT-debugging 技术 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- paip.提升用户体验-----c++ gcc 命令在notepad++扩展中的配置..
paip.提升用户体验-----c++ gcc 命令在notepad++扩展中的配置.. 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址: ...
- paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt
paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- paip.提升用户体验---论文本编辑器的色彩方案
paip.提升用户体验---论文本编辑器的色彩方案 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.ne ...
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...
- 使用渐进式JPEG来提升用户体验
今天才认识到原来JPEG文件有两种保存方式他们分别是Baseline JPEG(标准型)和Progressive JPEG(渐进式).两种格式有相同尺寸以及图像数据,他们的扩展名也是相同的,唯一的区别 ...
随机推荐
- Roslyn 如何使用 MSBuild Copy 复制文件
本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本. 在 MSBuild 里可以使用很多命令,本文告诉大家如何 ...
- setTimeout第三个参数
在廖雪峰大神的官方网站看nodejs的时候,发现自己对Promise函数不甚了解,于是转去看Promise函数,看到了这段代码: function multiply(input) { return n ...
- 一图理解vue生命周期
博客园上传图不太清晰,可以查看我的CSDN https://blog.csdn.net/jiaoshuaiai/article/details/90046736 感谢: https://segment ...
- javascript中的深拷贝与浅拷贝
javascript中的深拷贝与浅拷贝 基础概念 在了解深拷贝与浅拷贝的时候需要先了解一些基础知识 核心知识点之 堆与栈 栈(stack)为自动分配的内存空间,它由系统自动释放: 堆(heap)则是动 ...
- 被孟加拉题吊打的ACM考试
https://codeforces.com/gym/101864 题目并不难 B 考虑新加入的线段和之前线段有交的个数 总数-不交的,不交的:右端点在[l,r]左边,左端点在[l,r]右边的. 维护 ...
- 负margin的原理及应用
在很多布局中我们经常能够见到类似于margin:-10px;的用法,我们对正值的用法早已熟悉的不能再熟悉了,可是这负值到底有何用呢?听我给你吹. 负margin——普通文档流 普通文档流元素(不浮动, ...
- 2018.11.23 浪在ACM 集训队第六次测试赛
2018.11.23 浪在ACM 集训队第六次测试赛 整理人:刘文胜 div 2: A: Jam的计数法 参考博客:[1] 万众 B:数列 参考博客: [1] C:摆花 参考博客: [1] D:文化之 ...
- Linux 内核 MODULEDEVICETABLE 宏
这个 pci_device_id 结构需要被输出到用户空间, 来允许热插拔和模块加载系统知道什 么模块使用什么硬件设备. 宏 MODULE_DEVICE_TABLE 完成这个. 例如: MODULE_ ...
- 【58.75%】【BZOJ 1087】[SCOI2005]互不侵犯King
Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3040 Solved: 1786 [Submit][Status][Discuss] Descri ...
- springmvc整合freemarker教程(转)
1.介绍 我最近喜欢freemarker在网上找了大半天.都没有找到一个简单又容易理解的案例.虽然只是一个模板技术.但是相对刚开始什么都不知道的,很难入手.下面是自学(其实是谷歌和百度的东找西补).写 ...