Vue 的过渡系统提供了非常多简单的方法设置进入、离开和列表的动效。那么对于数据元素本身的动效呢,比如:

  • 数字和运算
  • 颜色的显示
  • SVG 节点的位置
  • 元素的大小和其他的属性

所有的原始数字都被事先存储起来,可以直接转换到数字。做到这一步,我们就可以结合 Vue 的响应式和组件系统,使用第三方库来实现切换元素的过渡状态。

状态动画与侦听器

通过侦听器我们能监听到任何数值属性的数值更新。可能听起来很抽象,所以让我们先来看看使用 GreenSock 一个例子:

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.3/TweenMax.min.js"></script><div id="animated-number-demo"><input v-model.number="number" type="number" step="20"><p>{{ animatedNumber }}</p>
</div>
new Vue({el: '#animated-number-demo',data: {number: 0,tweenedNumber: 0},computed: {animatedNumber: function() {return this.tweenedNumber.toFixed(0);}},watch: {number: function(newValue) {TweenLite.to(this.$data, 0.5, { tweenedNumber: newValue });}}
})

0

当你把数值更新时,就会触发动画。这个是一个不错的演示,但是对于不能直接像数字一样存储的值,比如 CSS 中的 color 的值,通过下面的例子我们来通过 Tween.js 和 Color.js 实现一个例子:

<script src="https://cdn.jsdelivr.net/npm/tween.js@16.3.4"></script>
<script src="https://cdn.jsdelivr.net/npm/color-js@1.0.3"></script><div id="example-7"><inputv-model="colorQuery"v-on:keyup.enter="updateColor"placeholder="Enter a color"><button v-on:click="updateColor">Update</button><p>Preview:</p><spanv-bind:style="{ backgroundColor: tweenedCSSColor }"class="example-7-color-preview"></span><p>{{ tweenedCSSColor }}</p>
</div>
var Color = net.brehaut.Colornew Vue({el: '#example-7',data: {colorQuery: '',color: {red: 0,green: 0,blue: 0,alpha: 1},tweenedColor: {}},created: function () {this.tweenedColor = Object.assign({}, this.color)},watch: {color: function () {function animate () {if (TWEEN.update()) {requestAnimationFrame(animate)}}new TWEEN.Tween(this.tweenedColor).to(this.color, 750).start()animate()}},computed: {tweenedCSSColor: function () {return new Color({red: this.tweenedColor.red,green: this.tweenedColor.green,blue: this.tweenedColor.blue,alpha: this.tweenedColor.alpha}).toCSS()}},methods: {updateColor: function () {this.color = new Color(this.colorQuery).toRGB()this.colorQuery = ''}}
})
.example-7-color-preview {display: inline-block;width: 50px;height: 50px;
}

Update

Preview:

#000000

动态状态过渡

就像 Vue 的过渡组件一样,数据背后状态过渡会实时更新,这对于原型设计十分有用。当你修改一些变量,即使是一个简单的 SVG 多边形也可实现很多难以想象的效果。

Sides: 10Minimum Radius: 50%Update Interval: 500 milliseconds

上述 demo 背后的代码可以通过这个 fiddle 进行详阅。

把过渡放到组件里

管理太多的状态过渡会很快的增加 Vue 实例或者组件的复杂性,幸好很多的动画可以提取到专用的子组件。
我们来将之前的示例改写一下:

<script src="https://cdn.jsdelivr.net/npm/tween.js@16.3.4"></script><div id="example-8"><input v-model.number="firstNumber" type="number" step="20"> +<input v-model.number="secondNumber" type="number" step="20"> ={{ result }}<p><animated-integer v-bind:value="firstNumber"></animated-integer> +<animated-integer v-bind:value="secondNumber"></animated-integer> =<animated-integer v-bind:value="result"></animated-integer></p>
</div>
// 这种复杂的补间动画逻辑可以被复用
// 任何整数都可以执行动画
// 组件化使我们的界面十分清晰
// 可以支持更多更复杂的动态过渡
// 策略。
Vue.component('animated-integer', {template: '<span>{{ tweeningValue }}</span>',props: {value: {type: Number,required: true}},data: function () {return {tweeningValue: 0}},watch: {value: function (newValue, oldValue) {this.tween(oldValue, newValue)}},mounted: function () {this.tween(0, this.value)},methods: {tween: function (startValue, endValue) {var vm = thisfunction animate () {if (TWEEN.update()) {requestAnimationFrame(animate)}}new TWEEN.Tween({ tweeningValue: startValue }).to({ tweeningValue: endValue }, 500).onUpdate(function (object) {vm.tweeningValue = object.tweeningValue.toFixed(0)}).start()animate()}}
})// 所有的复杂度都已经从 Vue 的主实例中移除!
new Vue({el: '#example-8',data: {firstNumber: 20,secondNumber: 40},computed: {result: function () {return this.firstNumber + this.secondNumber}}
})

+  = 60

20 + 40 = 60

我们能在组件中结合使用这一节讲到各种过渡策略和 Vue 内建的过渡系统。总之,对于完成各种过渡动效几乎没有阻碍。

赋予设计以生命

只要一个动画,就可以带来生命。不幸的是,当设计师创建图标、logo 和吉祥物的时候,他们交付的通常都是图片或静态的 SVG。所以,虽然 GitHub 的章鱼猫、Twitter 的小鸟以及其它许多 logo 类似于生灵,它们看上去实际上并不是活着的。

Vue 可以帮到你。因为 SVG 的本质是数据,我们只需要这些动物兴奋、思考或警戒的样例。然后 Vue 就可以辅助完成这几种状态之间的过渡动画,来制作你的欢迎页面、加载指示、以及更加带有情感的提示。

Sarah Drasner 展示了下面这个 demo,这个 demo 结合了时间和交互相关的状态改变:

from: https://cn.vuejs.org/v2/guide/transitioning-state.html

Vue.js 状态过渡相关推荐

  1. 波比-vue.js状态管理及ssr

    1.中心化和去中心化 中心化:一些需要共享的状态,抽离出来放到一个统一的地方进行管理 去中心化:就是各个组件的本地状态,各个组件管理各个组件中的状态 2.实现状态管理的思路 首先要有一个全局的对象 要 ...

  2. Vue.js 状态管理

    状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管理库 ...

  3. Vue | Vue.js 实现过渡动画

  4. js过渡效果_干货 | Vue事件、过渡和制作index页面

    " 最近在学习使用Vue作为前端的框架,本文简单介绍Vue的过渡效果,以及记录制作首页的过程. " Vue事件 1方法处理器 ● 可以用v-on指令监听DOM事件 ● 类似于内联表 ...

  5. 宝塔面板部署nuxt_MacOS下创建及部署vue.js项目(及Nuxt.js、PM2等相关流程)

    开发环境 权限准备 为避免后续流程出现权限不足的相关提示,首先在终端中输入以下代码检查当前系统是否已开启了对系统文件夹的保护: csrutil status 若结果为csrutil enabled,则 ...

  6. Vue.js 进入/离开 列表过渡

    概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate. ...

  7. 10.Vue.js前端框架:过渡

    1.过渡的作用 Vue.js 内置了一套过渡系统,该系统是 Vue.js 为 DOM 动画效果提供的一个特性.在插入.更新或者移除 DOM 时可以触发 CSS 过渡和动画,从而产生过渡效果. 2.单元 ...

  8. vue.js基础知识篇(5):过渡、Method和Vue实例方法

    第8章:过渡 1.CSS过渡 2.JavaScript过渡 3.渐进过渡 第9章:method Vue.js的事件一般通过v-on指令配置在HTML中,虽然也可以在js的代码中使用原生的addEven ...

  9. 关于Vue.js的v-for,key的顺序改变,影响过渡动画表现

    关于Vue.js的v-for,key的顺序改变,影响过渡动画表现 这个问题是在写Message组件出现的,先看代码部分 子组件: #Notice:<transition :name=" ...

最新文章

  1. Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()
  2. HTTP基础认证Basic Authentication
  3. 5个常见的SD-WAN挑战以及如何应对
  4. ⚡关于Eastmount博客「网络安全自学篇」系列重要通知!!!⚡
  5. hibernate.hbm2ddl.auto配置及意义
  6. shell中字符串操作【转】
  7. Python数据可视化案例三:使用Slider组件调整曲线参数
  8. 品‮方牌‬可以利用视‮号频‬做什么
  9. java list平均分成5份_java中将一个List等分成n个list的工具方法(推荐)
  10. (05)vtk通过多边形构建矩形,并拉伸成立方体,两个立方体独立操作
  11. MAYA打造地震后的古城场景-3D建模场景模型教程
  12. 录音分享以及重命名功能小结
  13. SQLite Reader 插件测试SQLite语法
  14. uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现
  15. [开题报告+任务书+论文+PPT+源码]基于安卓的个人图书馆设计[包运行成功]
  16. poj 4124:海贼王之伟大航路
  17. winform中TreeView显示树状图
  18. Linux加载vmlinux调试
  19. nonebot2——表情包生成插件升级版
  20. 浙江大学计算机科学与技术学院导师,浙江大学计算机科学与技术专业导师介绍:徐从富...

热门文章

  1. secureCRt中文乱码问题
  2. JTA 深度历险 - 原理与实现---转
  3. ios 标准 #pragma mark的用法
  4. Sklearn(v3)——朴素贝叶斯(2)
  5. 【风控场景】互利网上数字金融典型场景: 网购运费险
  6. 【Python】url基础:urllib
  7. 评分卡上线后如何进行评分卡的监测
  8. ubuntu jdk
  9. 互联网金融2.0 这是最好的时代
  10. Apache Kafka-消费端_顺序消费的实现