DEV/javascript

Javascript 화면 loading 구현 (화면 로딩 구현)

석봉 2023. 8. 28. 11:03

1. 로딩만 넣는 경우

html

  <div id="loading">
    <div class="spinner"></div>
  </div>

javascript

const loading = {
  start: () => {
    // @로딩 시작
    const loading = document.querySelector('#loading');
    loading.style.display = 'block';
  },
  end: () => {
    // @로딩 종료
    const loading = document.querySelector('#loading');
    loading.style.display = 'none';
  },
}

css

/* loading */
#loading {
  display: none;
  position: fixed;
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(255, 255, 255, 0.75);
}

.spinner {
  position: relative;
  top: 50%;
  margin: auto;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 3px solid rgba(0, 0, 0, 0.1);
  border-top-color: #03114E;
  animation: spin 0.6s infinite linear;
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

 

 

2. 로딩 하단에 문구를 넣는 경우

html

  <div id="loading">
    <div class="spinner"></div>
    <div class="state-viewer-container">
      <label class="label-font" id="stateLabel"></label>
    </div>
  </div>

javascript

/**
 * 화면 로딩 시작
 */
function loadingStart() {
  const loading = document.querySelector('#loading');
  loading.style.display = 'block';
}

/**
 * 화면 로딩 종료
 */
function loadingEnd() {
  const loading = document.querySelector('#loading');
  loading.style.display = 'none';
}

css

/* loading */
#loading {
  display: none;
  position: fixed;
  z-index: 9998;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(255, 255, 255, 0.75);
}

.state-viewer-container {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, 150%);
}

.spinner {
  position: relative;
  top: 50%;
  margin: auto;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 3px solid rgba(0, 0, 0, 0.1);
  border-top-color: #03114E;
  animation: spin 0.6s infinite linear;
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

/* + FONT (필요에 맞게 수정하여 사용) */
.label-font {
  font-size: 16px;
  font-weight: bold;
}