FrontEnd/JavaScript & TypeScript

[JS] JavaScript ๋งˆ์šฐ์Šค ์ปค์„œ ๋ชจ์–‘ ๋ฐ”๊พธ๊ธฐ

devwoodie 2022. 4. 22. 09:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“‹ ๋งˆ์šฐ์Šค ์ปค์„œ ๋ชจ์–‘ ๋ฐ”๊พธ๊ธฐ

์ปค์„œ ๋ชจ์–‘์„ ๋ฐ”๊พธ๋Š” ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. html์— ๋น„์–ด์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด์ค€ ํ›„์—
css๋กœ ์‚ฌ์šฉํ•  ์ปค์„œ ๋ชจ์–‘์„ ์ปค์Šคํ…€ ํ•ด์ค€ ํ›„์— script๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๊ฒŒ ํ•˜๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค.


 
์•„๋ž˜ ํƒœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
< HTML >

  • html์— ์ปค์„œ๋กœ ์‚ฌ์šฉํ•  ๋นˆ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
    <div class="cursor"></div>
     

< CSS >

  • css๋กœ ์ปค์„œ๋กœ ์‚ฌ์šฉํ•  ๋ชจ์–‘์„ ์ปค์Šคํ…€ ํ•ด์ค๋‹ˆ๋‹ค.
  • position: absolute ๋กœ ๋งŒ๋“ค์–ด์ง„ div ํƒœ๊ทธ๋ฅผ ๋„์›Œ์ค๋‹ˆ๋‹ค.
  • body์— cursor: none ์œผ๋กœ ๊ธฐ์กด ์ปค์„œ๋ฅผ ์—†์• ์ค๋‹ˆ๋‹ค.
    body{cursor: none;}
    .cursor{
      width: 20px; height: 20px; 
      background-color: #000; 
      border-radius: 10px; 
      position: absolute; left: 0; top: 0; 
      z-index: 999; 
      transition: background-color .2s, border-color .2s, border-radius .2s, transform .6s
    }
     

< JS >

  • script์˜ mousemove ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • client x,y ๊ฐ’์„ ์ด์šฉํ•ด ๋งˆ์šฐ์ฆˆ ์ขŒํ‘œ๋ฅผ ๊ตฌํ•œ ํ›„์— position๊ฐ’ left, top ๊ฐ’์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.client x,y : ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์›นํŽ˜์ด์ง€๊ฐ€ ๋ณด์—ฌ์ง€๋Š” ์˜์—ญ์„ ๊ธฐ์ค€์œผ๋กœ ์ขŒํ‘œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์›€์ง์ด๋”๋ผ๋„ ๊ฐ’์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • const cursor = document.querySelector('.cursor'); mouseEffect.addEventListener('mousemove',(e) => { cursor.style.left = `${e.clientX}px`; cursor.style.top = `${e.clientY}px`; });

728x90
๋ฐ˜์‘ํ˜•