Demo
Day 16 - CSS Text Shadow Mouse Move Effect
HTML ์ฝ๋
<body>
<div class="hero">
<h1 contenteditable>๐ฅWOAH!</h1>
</div>
</body>
CSS ์ฝ๋
.hero {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
color: black;
}
h1 {
text-shadow: 10px 10px 0 rgba(0, 0, 0, 1);
font-size: 100px;
}
JavaScript ์ฝ๋
const hero = document.querySelector(".hero");
const text = hero.querySelector("h1");
const walk = 100; // 100px
function shadow(e) {
const { offsetWidth: width, offsetHeight: height } = hero;
let { offsetX: x, offsetY: y } = e;
if (this !== e.target) {
x = x + e.target.offsetLeft;
y = y + e.target.offsetTop;
}
const xWalk = Math.round((x / width) * 100 - walk / 2);
const yWalk = Math.round((y / height) * 100 - walk / 2);
console.log(xWalk, yWalk);
text.style.textShadow = `
${xWalk}px ${yWalk}px 0 red,
${xWalk * -1}px ${yWalk}px 0 blue,
${xWalk}px ${yWalk * -1}px 0 green,
${xWalk * -1}px ${yWalk * -1}px 0 black
`;
}
function init() {
hero.addEventListener("mousemove", shadow);
}
init();
์ฒ์์ ๋ณผ ๋ CSS Text Shadow๊ฐ ๋ง์ฐ์ค ์์ง์์ ๋ฐ์ํด ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ๋งค์ฐ ์ ๊ธฐํ์๋๋ฐ ์ด๋ป๊ฒ ์๋๋๋ ๊ฒ์ธ์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฒ ์ฑ๋ฆฐ์ง์์๋ ES6 ๋ฒ์ ์ผ๋ก ์์ฑํ ๊ฒ์ด๋ค.
heroํ๊ทธ๋ ์คํฌ๋ฆฐ์์ ๋ธ๋ผ์ฐ์ ์ฐฝ ํฌ๊ธฐ๋งํผ์ width์ height๋ฅผ ๊ฐ์ง๋ฉฐ ๋ง์ฐ์ค ์์ง์์ heroํ๊ทธ์ ์๋์ ์ผ๋ก ์์ง์ด๋ ๊ฐ์
๋๋ค.(offsetX / offsetY)
์์๋์ด์ผ ํ ๊ฒ์ ์คํฌ๋ฆฐ์์ e.target์ ์ฝ์๋ก๊ทธ ์ฐ์ด๋ณด๋ฉด ๊ฐ์๊ธฐ ์ด๋์๊ฐ x์ขํ์ y์ขํ๊ฐ ์ด์ํด์ง๊ธฐ ์์ํ๋๋ฐ ๊ทธ ์ด์ ๋ e.target์ด heroํ๊ทธ ์์ ์๋ h1ํ๊ทธ๋ฅผ ๊ฐ๋ฆฌํฌ ๋ target์ด ๋ฐ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฐ๋ผ์ e.target์ด h1์ผ๋ก ๋ณ๊ฒฝ๋์์ ๋ x๊ฐ๊ณผ y๊ฐ์ ๊ทธ์ ๋ง์ ๋ณ๊ฒฝํด์ค ๋ชจ์ต์
๋๋ค.
์ด์ css text shadow์ px๊ฐ์ ์ด๋์ ๋๋ก ์ค์ ํ ์ง ์ ํ๋ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
์๋จ์ walk๋ผ๋ ๋ณ์์ 100๊ฐ์ ์ฃผ์๋๋ฐ ์ด๊ฒ์ ๋์ค์ shadow x, y์ ์์ง์์ ๊ฒฐ์ ํ๋ ๊ฐ์ด ๋๊ฒ ์ต๋๋ค.
์คํฌ๋ฆฐ์ ์ค์์ 0,0์ผ๋ก ๋๊ณ ์ค๋ฅธ์ชฝ ์๋๋ก ์ด๋ํ๋ฉด x / y ์ขํ๋ (50, 50) ์ผ์ชฝ ์๋๋ก ์ด๋ํ๋ฉด (-50, -50)์ด ๋ฉ๋๋ค.
์ด๊ฒ์ 100์ ์ค์ฌ์ผ๋ก ๋ฐ์ ๋๋์ ํ์ชฝ์ + ๋ฐ๋์ชฝ์ -๊ฐ์ผ๋ก ์ง์ ํ ๊ฒ์
๋๋ค.
์ด๋ ๊ฒ ์ง์ ํด์ค xWalk / yWalk๋ฅผ text shadow์ ์ ์ฉํด๋ณด๋ฉด ๊ทธ๋งํผ์ ๊ธฐ์ธ๊ธฐ๋ก shadow๊ฐ ์์ง์ด๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค :)
๊ฒฐ๋ก -> ์คํฌ๋ฆฐ ์์์ ์ผ์ด๋๋ ์ผ์ ๋ฐ๋ผ ์ ์ฉํ๊ธฐ ์ํด์๋ offset, offsetWidth ๋ฑ ์ขํ์ ๊ดํ ๊ฒ๋ค์ ์ด์ฉํ๋ฉด ๋ญ๋ ์ง ํ ์ ์์ต๋๋ค.