<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>Blurry Loading</title>
</head>
<body>
<section class="bg"></section>
<div class="loading-text">0%</div>
<script src="script.js"></script>
</body>
</html>
const loadText = document.querySelector('.loading-text')
const bg = document.querySelector('.bg')
let load = 0
let int = setInterval(blurring, 30)
function blurring() {
load++
if (load > 99) {
clearInterval(int)
}
loadText.innerText = `${load}%`
loadText.style.opacity = scale(load, 0, 100, 1, 0)// 투명도 점점 줄어듦
bg.style.filter = `blur(${scale(load, 0, 100, 30, 0)}px)`
}// 블러 효과 줄어듦
const scale = (num, in_min, in_max, out_min, out_max) => {
return ((num - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min
}
위에 자바스크립트가 이해가 안간다.
// 4. scale 함수 (제일 중요한 부분)
const scale = (num, in_min, in_max, out_min, out_max) => {
return ((num - in_min) * (out_max - out_min))
/ (in_max - in_min) + out_min
}
👉 이 함수는 숫자의 범위를 다른 범위로 바꿔주는 함수예요.
예시로 설명할게요:
scale(load, 0, 100, 1, 0)
→ load가 0일 땐 1, load가 100일 땐 0이 나오도록 변환.
즉, 투명도(1 → 0) 로 변환하는 거예요.
scale(load, 0, 100, 30, 0)
→ load가 0일 땐 30, load가 100일 땐 0이 나오도록 변환.
즉, 블러 정도(30px → 0px) 로 변환하는 거예요.
scale은 성적을 다른 기준으로 환산하는 것이라고 생각하면 돼요.
예:
수학 점수 0 ~ 100점을 → 학점 F ~ A 로 바꾸는 거랑 비슷해요.
여기서는:
로딩 퍼센트 0~100 → 투명도 1~0
로딩 퍼센트 0~100 → 블러값 30~0
👉 정리하면:
숫자 0~100을 가져와서 다른 범위로 바꿔주는 게 scale
그걸 이용해 글자와 배경의 투명도, 블러 효과를 자연스럽게 줄여주는 거예요.