我的动画出不来?还有评价星星我稍稍做改动,但是获取dom某个属性不是预期,望解答!

来源:3-4 header-detail 交互

qq_慕村4041488

2019-08-21

//detail
<template>
    <transition name="fade">
        <div class="detail-wrap" v-show="isToShow">
            <h1 class="title">{{seller.name}}</h1>
            <section class="star">
                <v-grade :score="seller.score"/>
            </section>
        </div>
    </transition> 
</template>
<script>
import grade from 'components/grade/grade.vue';
export default {
    name:'Detail',
    components:{
        'v-grade':grade
    },
    data() {
        return {
            data:'',
            isToShow: false
        }
    },
    props:{
        seller:{
            type:[Object,Array],
            default() {
                return {}
            }
        }
    },
    methods:{
        show(){
           this.isToShow = true; 
        }
    }
}
</script>
<style lang="scss" scoped>
.detail-wrap{
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    background-color: rgba(7,17,27,.8);
    .fade{
        &-enter-active,
        &-leave-active{
            transition: all .5s;
        }
        &-enter, 
        &-leave-to{
            opacity: 0;
        }
    }
}
</style>

在星星组件里,我设想获取星星组件的dom 宽度,将分数转化成宽度参数,通过点亮的星星遮罩没有点亮的星星,通过设置点亮星星外层wrap 宽度来达到一个点亮(这样可以达到不止半颗星星的填充效果),但是我在动态获取宽度时取
不到实际宽度,点击header 后弹出详情后 获取的星星组件dom 宽度为0,考虑边界问题,代码修改成如下,还是一样。当弹窗出来时,如下图 然后我修改下星星组件,代码保存,然后就能正确打印宽度
mounted(){
this.KaTeX parse error: Expected '}', got 'EOF' at end of input: …nsole.log(this.refs.starDom.offsetWidth);
});
}
图片描述

写回答

2回答

qq_慕村4041488

提问者

2019-08-21

mounted(){

this.$nextTick(()=>{

console.log(this.$refs.starDom.offsetWidth);

});

}

提问的里面乱码了,我就是加上了这个还是一样的额,所以就很懵逼问问了,detail 过度动画也没有呢!

0
1
ustbhuangyi
mounted 的时机是弹窗 show 出来的吗,你加个 debugger 断点调试一下
2019-08-21
共1条回复

ustbhuangyi

2019-08-21

你试试在弹层 show 出来后,在 this.$nextTick 回调中获取 DOM 的宽度。

0
0

Vue.js2.5+cube-ui重构饿了么App(经典再升级)

掌握Vue1.0到2.0再到2.5最全版本应用与迭代,打造极致流畅的WebApp

9868 学习 · 4162 问题

查看课程