【发布时间】:2018-07-31 13:57:22
【问题描述】:
我正在尝试学习 VueJS,但目前无法通过转换解决此问题。我有两个组件,分别称为 ComponentA 和 ComponentB,如下所示:
组件A:
<template>
<div id="ComponentA">
<h1 class="header" v-on:click="update">HEADER</h1>
<transition
name="custom-classes-transition"
enter-active-class="animated fadeInDown"
leave-active-class="animated fadeOutUp"
><p class="content" v-if="visible">
Some information...
</p></transition>
</div>
</template>
<script>
import App from "@/App";
export default {
datas: {
visible: false
},
name: "ComponentA",
data () {
return this.$options.datas;
},
methods: {
update () {
App.update(this.$options.name);
}
}
};
</script>
<style scoped>
</style>
组件B:
<template>
<div id="ComponentB">
<h1 class="header" v-on:click="update">HEADER2</h1>
<transition
name="custom-classes-transition"
enter-active-class="animated fadeInDown"
leave-active-class="animated fadeOutUp"
><p class="content" v-if="visible">
Some more information...
</p></transition>
</div>
</template>
<script>
import App from "@/App";
export default {
datas: {
visible: false
},
name: "ComponentB",
data () {
return this.$options.datas;
},
methods: {
update () {
App.update(this.$options.name);
}
}
};
</script>
<style scoped>
</style>
这是我的 App.vue:
<template>
<div id="app">
<header href="https://cdn.jsdelivr.net/npm/animate.css" rel="stylesheet" type="text/css">
<ComponentA />
<ComponentB />
</div>
</template>
<script>
import ComponentA from "@/components/ComponentA";
import ComponentB from "@/components/ComponentB";
export default {
name: "App",
components: {
ComponentA,
ComponentB
},
update (clickedComponent) {
for (let component in this.components) {
component = this.components[component];
if (component.name === clickedComponent) {
component.datas.visible = !component.datas.visible;
} else {
component.datas.visible = false;
}
}
}
};
</script>
<style>
@import url('https://fonts.googleapis.com/css?family=Space+Mono');
:root {
--background: #0f0f0f;
--blueish: #546a76;
--grayish: #7c7c7c;
--lighterblueish: #737c81;
}
body {
line-height: 1.7;
background-color: var(--background);
color: var(--grayish);
font-family: 'Space Mono', monospace;
font-size: 18px;
position: relative;
height: 100%;
width: 60%;
margin: auto;
padding-top: 10vh;
}
.header {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
color: var(--blueish);
width: max-content;
position: sticky;
left: 100%;
}
.header span {
background-color: var(--lighterblueish);
color: var(--background);
}
.content {
padding-top: 5%;
}
.content span {
color: var(--blueish);
}
</style>
所以问题是,当我单击 ComponentA 的标题时,它的“内容”会以流畅的动画淡入,而 ComponentB 会向下移动,但没有任何过渡。我无法向 ComponentB 的运动添加过渡。它只是立即跳下。我尝试添加键,对身体上的所有东西进行过渡,但这些都不起作用。我需要以某种方式为 ComponentB 的运动添加过渡。
编辑:JSFiddle:https://jsfiddle.net/44ctt020/2/
【问题讨论】:
-
您能添加一个工作代码示例吗?也许是一个 JSFiddle。
-
花了我一段时间,但还是成功了:jsfiddle.net/44ctt020/2 哦,一些 css 东西不起作用(比如最大内容和粘性位置),但我认为它们不相关
标签: javascript css vue.js vuejs2