2017-09-09 1 views
1

나는 서버와 다른 속도로 다른 양의 콘텐츠 (텍스트 및 이미지)가 나오는 네 가지 html 요소가 있습니다. 모든 콘텐츠가 모든 요소에 도달 한 후에야 어떻게 콘텐츠를 보여줄 수 있습니까?콘텐츠 다운로드 동기화

처음에는 자리 표시자를 표시하고 모든 콘텐츠를 사용자에게 표시 할 준비가되었을 때만 제거하려고합니다.

+0

프리로드 콘텐츠? 유일한 문제는 이미지 지연 (즉, 텍스트가 서버에서 즉시 렌더링 됨) 인 경우 이미지를 미리로드하는 것입니다. image.onload 호출을 사용하여 다운로드를 집계하고 DOM 렌더링을 트리거 할 때까지 다운로드를 많이 사용하는 솔루션이 많이 있습니다. 그들 모두 –

+0

당신은'Promise.all()' – Redu

답변

2

이 무작위 이미지 API는 고통스럽게 느리지 만 데모는 좋습니다. 다음과 같이 접근 할 수 있습니다.

var imgPrs = Array.from({length: 4}) 
 
        .map(_ => fetch("https://unsplash.it/300/400/?random").then(res => res.blob())); 
 
Promise.all(imgPrs) 
 
    .then(blob => document.querySelectorAll("#container img") 
 
         .forEach((img, i) => img.src = (window.URL || window.webkitURL).createObjectURL(blob[i])));
#container { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    justify-content: space-evenly; 
 
    align-items: center; 
 
    width: 80vw; 
 
    height: 60vw; 
 
    background-color: #000; 
 
    box-sizing: border-box; 
 
} 
 

 
.tl { 
 
    width: 45%; 
 
    height: 45%; 
 
    background-color: #ccc; 
 
} 
 

 
.tr { 
 
    width: 45%; 
 
    height: 45%; 
 
    background-color: #bbb; 
 
} 
 

 
.bl { 
 
    width: 45%; 
 
    height: 45%; 
 
    background-color: #aaa; 
 
} 
 

 
.br { 
 
    width: 45%; 
 
    height: 45%; 
 
    background-color: #999; 
 
}
<div id="container"> 
 
    <img class="tl"> 
 
    <img class="tr"> 
 
    <img class="bl"> 
 
    <img class="br"> 
 
</div>

+1

젠체하는, 이것은 정말 천천히, 당신은 회 전자가 필요합니다;) 사용할 수 있습니다 – Xlee

관련 문제