css - Vue2 v-if 使我的转换不起作用

标签 css vue.js vuejs2 css-transitions

我目前在一个元素上有一个 v-if 指令,该元素是一个用于显示购物车的灯箱。

点击导航栏上的“查看购物车”按钮,灯箱的状态将激活 v-if 语句。

所有这些都工作正常,但我还尝试将一个附加类切换到名为“visible”的灯箱元素,这将激活不透明度的过渡以提供淡入/淡出效果。

但是,我目前得到的是 v-if 使我的灯箱购物车立即出现。有没有办法让我的转换与 v-if 一起工作?

下面是我的代码:

<template>
    <div class="full-page">
        <navbar @openCart="toggleCart"/>
        <product />
        <div class="lightbox"
            v-if="lightboxCart"
            :class="{visible: lightboxCart}">
            <cart
                @closeCart="toggleCart"/>
        </div>
    </div>
</template>

<script>
export default {
    head() {
        return {
            title: 'Totonou',
            meta: [
                {
                    hid: 'description',
                name: 'description',
                content: 'Customizable Jewelry Organizer'
                }
            ]
        }
    },
    data() {
        return {
            lightboxCart: false
        }
    },
    components: {
        'navbar' : require('@/components/AppHeader.vue').default,
        'product' : require('@/components/ProductPage/Product.vue').default,
        'cart' : require('@/components/CartPage/Cart.vue').default,
    },
    methods: {
        toggleCart() {
            this.lightboxCart = !this.lightboxCart
        }
    }
}
</script>

<style scoped>
    .fullpage {
        position: relative;
    }
    .lightbox {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background-color: rgba(0,0,0,0.5);
        width: 100%;
        height: 100%;
        opacity: 0;
        transition: 0.8s all cubic-bezier(0.39, 0.575, 0.565, 1);
    }
    .lightbox.visible {
        opacity: 1;
    }

</style>

最佳答案

您可以使用vue transitions :

new Vue({
  el: "#demo",
  data() {
    return {
      lightboxCart: false
    }
  },
  methods: {
    toggleCart() {
      this.lightboxCart = !this.lightboxCart
    }
  }
})
.fullpage {
    position: relative;
}
.lightbox {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: rgba(0,0,0,0.5);
    width: 100%;
    height: 100%;
    /* opacity: 0; */
    transition: 1.8s all cubic-bezier(0.39, 0.575, 0.565, 1);
}
.lightbox.visible {
  /* opacity: 1; */
}
.fade-enter-active, .fade-leave-active {
  transition: opacity 1.5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <div class="full-page">
    <button @click="toggleCart">show</button>
    <transition name="fade">
      <div class="lightbox"
          v-if="lightboxCart"
          :class="{visible: lightboxCart}">
      </div>
    </transition>
  </div>
</div>

关于css - Vue2 v-if 使我的转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70983193/

相关文章:

jquery - 改变 HTML5 <video> 标签的视角

vue.js - 如何使用 SCSS 配置 Vue

javascript - Nativescript Google map - 更改折线颜色

vue.js - 使用 Vuejs 绑定(bind)颜色

css - Vue JS 2 表格标题随内容水平滚动但不垂直滚动

css - 设置div的高度

javascript - 如何获得td的大小

css - 输入第一个字母后不显示文本

vue.js - VueJS 上传带有附加数据的图像

node.js - 如何在 nuxtjs 中的组件方法而不是 fetch 方法中进行重定向?