Lv1_junior_dev
자라나라실력실력
Lv1_junior_dev
전체 방문자
오늘
어제

주인장 GitHub 바로가기

    • 분류 전체보기 (112)
      • 주절주절 (6)
      • 프로젝트 회고록 (3)
      • 꿀팁 (3)
      • 알고리즘 풀이 (26)
      • 이것 저것 (2)
      • 자바스크립트 - Vanilla JS (25)
      • 자바스크립트 - React.js (37)
      • 자바스크립트 - Next.js (4)
      • 자바스크립트 - TypeScript (5)
      • HTML (0)
      • CSS (1)

    인기 글

    hELLO · Designed By 정상우.
    Lv1_junior_dev

    자라나라실력실력

    [자바스크립트 / Vanilla JS] window.onload 여러 번 사용하기
    자바스크립트 - Vanilla JS

    [자바스크립트 / Vanilla JS] window.onload 여러 번 사용하기

    2022. 7. 13. 20:54

     

    자바스크립트에서 페이지가 모두 로딩된 후 함수 등을 호출하는 방법을 많이 사용한다.

    그런데 만약 웹페이지에서 window.onload가 여러 번 사용하는 경우에는 여러 번 호출되지 않고 단 한 번만 호출된다는 단점이 있다.

    window.onload을 사용해야 할 때에는만약 자바스크립트를 사용한 라이브러리를 만들었을 때 ... 그리고 이 라이브러리가 여러개이고 모두 페이지가 모두 로딩된 후 동작해야한다면 onload를 대체할 방법이 필요하다.

    # window.onload 대체하는 방법을 알아보자,

    이 경우 생각할 수 있는 방법은 window.onload를 사용하는 대신에 바로 window.addEventListener()를 사용하여 window 객체에 이벤트를 직접 추가하는 방법이 있다.

    window.addEventListener('onload', 콜백함수)

    이 방법은 window.onload와 달리 addEventListener를 사용한 모든 콜백함수가 호출될 수 있다. 

    즉 여러 개의 onload를 사용하여도 한 번만 호출되는 문제를 해결할 수 있는 방법이다. 그럼 간단한 예제를 보도록 하자.

    먼저 기존의 코드이다. onload에 console.log()를 사용하여 1, 2를 두 번 호출되도록 두 번 사용하였다.

    window.onload = function() {
      console.log("1")
    }
    window.onload = function() {
      console.log("2")
    }


    결과는 1, 2가 모두 호출되지 않는다. 즉 onload를 여러 번 호출할 경우 배열처럼 추가되는 것이 아니라 갱신되기 때문이다.

    이제 이를 해결하기 위해서 addEventListener()를 사용해보자.

    아래는 두 개의 방법 모두를 사용한 예제이다.

    window.onload = function() {
      console.log("1")
    };
    window.addEventListener('load', function() {
      console.log("2")
    });


    위 코드는 이 전 예제와는 달리 onload 그리고 addEventListener를 사용한 모든 콜백함수가 호출된다
    이처럼 하나 이상의 onload를 사용되어 문제가 발생하는 경우라면 위의 방법으로 해결이 가능하다.

     

    출처 : https://webisfree.com/2020-03-12/[자바스크립트]-window-onload-여러-번-사용하는-대체-방법

    '자바스크립트 - Vanilla JS' 카테고리의 다른 글

    [자바스크립트 / Vanilla JS] async / await 비동기 통신  (0) 2022.07.21
    [자바스크립트 / Vanilla JS] new 연산자와 생성자 함수  (0) 2022.07.20
    [자바스크립트 / Vanilla JS] 비공개 멤버  (0) 2022.07.04
    [자바스크립트 / Vanilla JS] if(조건문) 줄이기  (1) 2022.06.24
    [자바스크립트 / Vanilla JS] ES6 템플릿 리터럴 (Template Literal)  (0) 2022.06.21
      '자바스크립트 - Vanilla JS' 카테고리의 다른 글
      • [자바스크립트 / Vanilla JS] async / await 비동기 통신
      • [자바스크립트 / Vanilla JS] new 연산자와 생성자 함수
      • [자바스크립트 / Vanilla JS] 비공개 멤버
      • [자바스크립트 / Vanilla JS] if(조건문) 줄이기
      Lv1_junior_dev
      Lv1_junior_dev
      나는 성장이 고프다. 자라나라 개발 실력 !

      티스토리툴바