[JavaScript] 자바스크립트에서 이미지 로딩 지연시키기

2022. 7. 22. 22:01Program/JavaScript

186_자바스크립트에서 이미지 로딩 지연시키기

[적용]

  • 이미지 로딩 중인 상태를 표시하고 싶을 때
  • 이미지 로ㅛ딩 후 이미지 데이터에 엑세스하고 싶을 때

[내용]

웹 페이지 내 이미지 로딩을 지연시키기 위해서는 DomContentLoaded 이벤트에서

img 요소 data-src 속성의 값을 Map에 보관한 뒤 요소의 속성값을 비운다.

src가 아닌 data-src를 사용하는 이유는 src속성에 공백 값이 들어가면 네트워크 통신이 발생하기 때문이다.

로딩하고 싶은 시점에 Map에 보관한 값을 src 속성에 넣어 작업을 처리한다.

해당 작업을 사용하여 버튼 클릭 시 이미지를 로딩하는 예시를 확인해 보자.

 

HTML                                                                                                                                                              index.html

<body>
    <p>
        <img data-src="images/photo_a.jpg" width="320" height="360" />
        <img data-src="images/photo_b.jpg" width="320" height="360" />
    </p>
    <button class="btn">그림 로딩하기</button>
</body>

JavaScript                                                                                                                                                          main.js

// 데이터 보관을 위한 Map
const srcMap = new Map();
window.addEventListener('DOMContentLoaded', () => {
    // 모든 img 요소 참조
    const imgs = document.querySelectorAll('img');
    imgs.forEach((img) => {
        // 각 img 요소 data-src 속성을 Map에 보관
        srcMap.set(img, img.dataset.src);
        // 로딩을 지연시키기 위해 요소의 속성 제거
        img.removeAttribute('src');
    });
});

const btn = document.querySelector('.btn');
btn.addEventListener('click', () => {
    //모든 img 요소 참조
    const imgs = document.querySelectorAll('img');
    imgs.forEach((img) => {
        // Map에 보관한 값을 src 속성에 대입
        const source = srcMap.get(img);
        img.src = source;
    });
});

실행결과

 


 

 

 

 

 

참조 :
실무에 바로 적용하는 자바스크립트 코드레시피 278
아케다 야스노부, 카노 타케시 지음 / 이춘혁 옮김