2017-10-17 6 views
2

Vue js 및 전환에 익숙하지 않으며 서버에서 느슨하게로드되는 데이터를 래핑하려는 Vue 구성 요소를 설계하고 있으므로 데이터 사용할 수없는 경우로드하는 GIF가 표시됩니다.동시에 두 개의 다른 요소에 대해 페이드 인 및 페이드 아웃 전환

잘 작동합니다. 그러나 간단한 페이드 전환을 추가하여 데이터를 사용할 수있을 때 (또는 그 반대로) 동시에 GIF를 페이드 아웃하고 콘텐츠가 페이드 인하도록하면 콘텐츠와 GIF가 동시에 나타나거나 나타나면 서로 위아래로 밀려납니다 사라지고있어.

이 내 Lazy.vue 구성 요소 파일입니다

<template> 
    <div class="fixed-pos"> 
    <transition name="fade"> 
     <slot v-if="loaded"></slot> 
     <div v-else> 
      <img src="../assets/loading.gif"/> 
     </div> 
    </transition> 
    </div> 
</template> 

<script> 
export default { 
    name: 'Lazy', 
    props: { 
    loaded: { 
     type: Boolean 
    } 
    } 
} 
</script> 

그리고 그것의 샘플 사용 :

<template> 
    <div> 
    <button @click="loaded = !loaded">Toggle</button> 
     <lazy :loaded="loaded"> 
      <ul v-if="rendered"> 
       <transition-group name="fade"> 
        <li v-for="notif in notifs" v-bind:key="notif"> 
         <span>{{notif}}</span> 
        </li> 
       </transition-group> 
      </ul> 
     </lazy> 
    </div> 
</template> 

<script> 
import Lazy from './Lazy' 

export default { 
    name: 'HelloWorld', 
    components: { 
    Lazy 
    }, 
    data() { 
    return { 
     msg: 'Welcome to Your Vue.js App', 
     rendered: true, 
     notifs: [ 
     'Notif 1', 
     'Notification 2 is here!', 
     'Here comes another notification', 
     'And another here ...' 
     ], 
     loaded: true 
    } 
    } 
} 
</script> 

내 animation.css 파일 :

.fade-enter-active, .fade-leave-active { 
    transition: opacity .5s 
} 
.fade-enter, .fade-leave-to { 
    opacity: 0 
} 

어떤 식 으로든 해결이 있는가 이 문제는 vue 전환 또는 다른 방법을 사용합니까?

답변

1

gif 및 콘텐츠에 대한 CSS 규칙이 position: absolute;이어야합니다. JSFiddle example.

Doc는 말한다 :

이 ... 공백이 페이지 레이아웃의 요소에 대해 작성되지 않습니다. 대신, 가장 가까운 위치에있는 조상이있는 경우 해당 조상에 상대적으로 배치됩니다. 그렇지 않으면 초기 포함 블록을 기준으로 배치됩니다.

gif 및 콘텐츠의 상위 요소에는 아마도 position: relative;이 필요합니다.