背景颜色的平滑过渡/vue js



我正在尝试在vue-js 中平滑背景线性梯度之间的转换

以前,当我使用普通的js/HTML/css创建这种过渡效果时,我为每种颜色创建了一个div,并只是更改了不透明度-将一个渐变为另一个

(你可以在这里看到我试图创建的效果,只需在不同语言之间导航即可看到效果(https://littleleo.dev/

在vue js-

当点击(获得导航id(时,导航调用一个功能

<Navbar :articleData="articleData" @backgroundColor="background"/>

background(f(使用颜色列表更新关注的属性

methods: {
background(id){
let bg_id = id-1 // -1 so the number is inline with the array starting at 0 not 1
this.backgroundColor = this.backgrounds[bg_id]
}

data(){return{
backgroundColor: null,
backgrounds: 
[
'linear-gradient(45deg, #e96443, #904e95)', 
'linear-gradient(45deg, #3a7bd5, #3a6073)', 
'linear-gradient(45deg, #f7ff00, #db36a4)',

'linear-gradient(45deg, #B24592, #F15F79)',
'linear-gradient(45deg, #FFB75E, #ED8F03)',
'linear-gradient(45deg, #673AB7, #512DA8)',
'linear-gradient(45deg, #fc00ff, #00dbde)',
'linear-gradient(45deg, #00C9FF, #92FE9D)',
],

神奇的事情就发生在这里:背景改变了

// changes background color 
watch: {
backgroundColor: function(){
document.querySelector('.topElements').style.background = this.backgroundColor
}
}

因此,目前这种情况下,背景颜色之间的过渡时间没有变化——我想知道是否有人知道如何在不为每种颜色创建覆盖div的情况下进行过渡/或者有一些巧妙的vue-js魔术可以解决这种类型的问题:

更多详细信息:

这在App.vue中,我的模板如下:

<template>
<div id="app">
<div class="topElements" :class="[noneSelected]"> // <<< COLOR APPLIED HERE
<!-- animation -->
<lottie :options="defaultOptions" :height="350" :width="350"/>
<Navbar :articleData="articleData" @backgroundColor="background"/>
<span class="breaker"></span>
<transition name="content-holder">
<router-view :key="$route.path"/>
</transition>
</div>
<Footer />
</div>
</template>

背景颜色被应用于类="0"内部的所有事物;topElements";


任何帮助或建议都将令人惊叹-提前感谢-Wally

正如vue.js文档所说,产生类似效果的最佳方法是使用绝对定位。https://v2.vuejs.org/v2/guide/transitions.html#Transition-模式这是最好的处理方法。

大多数获得相同效果的技巧都有更大的代码,这不是正确的方法。

要了解vue.js转换的工作原理,请访问https://alligator.io/vuejs/understanding-transitions/https://medium.com/@msanathkumar/理解-vuejs-115a0f5c6fbc 中的转换和动画

最新更新