vue中显示和隐藏如何做动画_vue-State Transitions(状态转换)

本文探讨了在Vue中如何对数字、颜色、SVG等数据变化进行动画处理,利用观察者和第三方库如Tween.js进行状态转换。通过实例展示了动态状态转换的应用,并提出将转换组织成组件以降低复杂性,提供了一个更易于管理和维护的解决方案。
摘要由CSDN通过智能技术生成
9e07c1c7d877eb51d238e631bf7a81bf.png

Vue的过渡系统提供了许多简单的方法来动画进入,离开和列表,但动画数据本身又如何呢?例如:

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

所有这些都已经存储为原始数字或可以转换为数字。一旦我们这样做了,我们就可以使用第三方库对这些状态更改进行动画处理,以结合Vue的反应性和组件系统。

用观察者动画状态

观察者允许我们将任何数值属性的变化动画成另一个属性。这听起来可能听起来很复杂,所以我们来深入一个使用Tween.js的例子:

{{ animatedNumber }}

new Vue({ el: '#animated-number-demo', data: { number: 0, animatedNumber: 0 }, watch: { number: function(newValue, oldValue) { var vm = this function animate () { if (TWEEN.update()) { requestAnimationFrame(animate) } } new TWEEN.Tween({ tweeningNumber: oldValue }) .easing(TWEEN.Easing.Quadratic.Out) .to({ tweeningNumber: newValue }, 500) .onUpdate(function () { vm.animatedNumber = this.tweeningNumber.toFixed(0) }) .start() animate() } }})

当您更新号码时,更改会在输入下面显示动画。这使得一个很好的演示,但什么东西不是直接存储为一个数字,如任何有效的CSS颜色,例如?以下是我们如何通过添加Color.js来实现这一点:

Update

Preview:

{{ tweenedCSSColor }}

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;}

动态状态转换

与Vue的转换组件一样,数据支持状态转换可以实时更新,这对原型设计特别有用!即使使用简单的SVG多边形,也可以实现许多难以想象的效果,直到您稍稍使用变量。

请参阅此fiddle以获取上述演示背后的完整代码。

将转换组织成组件

管理许多状态转换可能会快速增加Vue实例或组件的复杂性。幸运的是,许多动画可以提取出专用的子组件。我们用前面例子的动画整数来做这件事:

+ = {{ result }}

+ =

// This complex tweening logic can now be reused between// any integers we may wish to animate in our application.// Components also offer a clean interface for configuring// more dynamic transitions and complex transition// strategies.Vue.component('animated-integer', { template: '{{ tweeningValue }}', 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 = this function animate () { if (TWEEN.update()) { requestAnimationFrame(animate) } } new TWEEN.Tween({ tweeningValue: startValue }) .to({ tweeningValue: endValue }, 500) .onUpdate(function () { vm.tweeningValue = this.tweeningValue.toFixed(0) }) .start() animate() } }})// All complexity has now been removed from the main Vue instance!new Vue({ el: '#example-8', data: { firstNumber: 20, secondNumber: 40 }, computed: { result: function () { return this.firstNumber + this.secondNumber } }})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 实现动画可以使用 Vue 提供的 `transition` 组件,可以通过添加过渡类名来控制动画效果。 ```html <template> <transition name="fade"> <div v-if="show">Hello World</div> </transition> </template> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } </style> ``` 在上面的代码,我们使用了 `transition` 组件包裹了一个 `div` 元素,通过 `v-if` 控制其显示隐藏。当 `div` 元素进入或离开时,会自动添加对应的过渡类名,我们可以通过这些类名来控制动画效果。 在样式,我们定义了 `fade-enter-active` 和 `fade-leave-active` 类名,控制进入和离开的动画效果。同时,我们定义了 `fade-enter` 和 `fade-leave-to` 类名,控制进入和离开时的起始状态和结束状态。 除了使用 Vue 提供的 `transition` 组件外,还可以使用 CSS3 动画属性来实现动画效果,如 `animation` 和 `transition`。具体使用方式和上面的示例类似,只需要在样式定义对应的动画效果。例如: ```html <template> <div v-if="show" class="fade">Hello World</div> </template> <style> .fade { animation: fade-in 0.5s ease; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } </style> ``` 在上面的代码,我们定义了一个名为 `fade-in` 的动画,控制元素从透明度 0 到透明度 1 的渐变效果。在元素显示时,我们通过添加 `fade` 类名来触发动画效果。 总的来说,Vue 提供的 `transition` 组件可以方便地实现常见的动画效果,而 CSS3 动画属性则更加灵活,可以实现更加复杂的动画效果。具体使用哪种方式,可以根据实际需求和开发经验进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值