๋ง์ฐ์ค ์ด๋์ ๋ฐ๋ผ ํ
์คํธ๊ทธ๋ฆผ์ ํจ๊ณผ๋ฅผ ์ฃผ์ด ์์ง์ด๊ฒ ํจ.
์ด๊ธฐ์ฝ๋
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mouse Shadow</title>
</head>
<body>
<div class="hero">
<h1 contenteditable>๐ฅWOAH!</h1>
</div>
<style>
html{
color:#000;
font-family:sans-serif;
}
body{
margin: 0;
}
.hero{
min-height:100vh;
display:flex;
justify-content: center;
align-items: center;
color:#000;
}
h1{
text-shadow: 10px 10px 0 rgba(0,0,0,1);
font-size:100px;
}
</style>
<script>
</script>
</body>
</html>
์ด๊ธฐํ๋ฉด
const hero = document.querySelector('.hero');
const text = hero.querySelector('h1');
const walk = 500; // 100px;
heroํด๋์ค, h1ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ด.
walk๋ ์ด์ง์ด๋ ๋ฒ์.
function shadow(e){
// console.log(e);
const {offsetWidth:width, offsetHeight: height} = hero;
let {offsetX: x, offsetY: y} = e;
// console.log(x, y);
// this๋ <div class="hero">, target์ h1
if(this !== e.target){
x = x + e.target.offsetLeft;
y = y + e.target.offsetTop;
}
const width = hero.offsetWidth;
const height = hero.offsetHeight;
์ ๋์ค์
const {offsetWidth:width, offsetHeight: height} = hero;
ํ ์ค๋ก ํฉ์น ์ ์๋ค.
const xWalk = Math.round((x / width * walk) - (walk / 2));
const yWalk = Math.round((y / height * walk) - (walk / 2));
text.style.textShadow = `
${xWalk}px ${yWalk}px 0 rgba(255, 0, 255, 0.7),
${xWalk * -1}px ${yWalk}px 0 rgba(0,255,255,0.7),
${yWalk}px ${xWalk * -1}px 0 rgba(0,255,0,0.7),
${yWalk * -1}px ${xWalk}px 0 rgba(0,0,255,0.7)
`;
}
h1ํ๊ทธ์ ๊ทธ๋ฆผ์๋ฅผ ์ค์ ํด์ค.
hero.addEventListener('mousemove', shadow);
๋ง์ฐ์ค๊ฐ ์์ง์ด๋ฉด shadowํจ์๋ฅผ ์คํ.