๐Ÿ‘โ€๐Ÿ—จjavascript(์บ๋Ÿฌ์…€ ๋งŒ๋“ค๊ธฐ, ์Šคํฌ๋กค๋ฐ” ๋งŒ๋“ค๊ธฐ, ์ผ€๋Ÿฌ์…€์— ์Šค์™€์ดํ”„ ๊ธฐ๋Šฅ์ถ”๊ฐ€)

stayby94ยท2023๋…„ 8์›” 1์ผ

JS๋ฌธ๋ฒ•

๋ชฉ๋ก ๋ณด๊ธฐ
7/15

์บ๋Ÿฌ์…€ ๋งŒ๋“ค๊ธฐ

  • ์‹œ์ž‘ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

<div style="overflow: hidden">
    <div class="slide-container">
      <div class="slide-box">
        <img src="car1.png">
      </div>
      <div class="slide-box">
        <img src="car2.png">
      </div>
      <div class="slide-box">
        <img src="car3.png">
      </div>
    </div>
 </div> 
.slide-container {
  width: 300vw;
  transition: all 1s;
}
.slide-box {
  width: 100vw;
  float: left;
}
.slide-box img {
  width: 100%;
} 
  • vw ๋‹จ์œ„๋Š” ๋ธŒ๋ผ์šฐ์ € ํญ์— ๋น„๋ก€ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. 100vw๋Š” ๋ธŒ๋ผ์šฐ์ € ํญ์˜ 100%์ž…๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งฐ๋”๋‹ˆ ์ด๋ฏธ์ง€ 3๊ฐœ๊ฐ€ ๊ฐ€๋กœ๋กœ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข…ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

    • 2๋ฒˆ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด 2๋ฒˆ์‚ฌ์ง„์ด ์Šฌ๋ผ์ด๋“œ๋˜์–ด์„œ ๋ณด์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์ตœ์ข…ํ™”๋ฉด์ž„.
    • ์–ด๋–ค html ์š”์†Œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š”๊ฑด margin-left ๋˜๋Š” transform์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ.
.slide-container {
  width: 300vw;
  transition: all 1s;
  transform: translateX(-100vw);
} 
  • ์•„๊นŒ ๋งŒ๋“  cssํŒŒ์ผ ์ค‘ ๊ฐ€๋กœ๋กœ ๊ธด ๋ฐ•์Šค์— transform: translateX(-100vw) ์ถ”๊ฐ€
  • ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ -200vw๋ฅผ ์ฃผ๋ฉด 3๋ฒˆ์งธ ์‚ฌ์ง„์œผ๋กœ ๋„˜์–ด๊ฐ
  • ์ด๊ฑธ ํ™œ์šฉํ•ด์„œ 3๋ฒˆ์‚ฌ์ง„๊นŒ์ง€์˜ ์บ๋Ÿฌ์…€์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ .
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ

    • ์–ธ์ œ ์ข…๋ฃŒํ™”๋ฉด์œผ๋กœ ๋ณ€ํ• ์ง€ JS ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ

      $('.slide-2').on('click', function() {
      $('.slide-container').css('transform', 'translateX(-100vw)');
      });
      • ๋ฒ„ํŠผ2์— ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ตœ์ข…ํ™”๋ฉด์œผ๋กœ ๋ณ€ํ•จ.
  • ๋‹ค์Œ๋ฒ„ํŠผ, ์ด์ „๋ฒ„ํŠผ์€ ํด๋ฆญํšŸ์ˆ˜์— ๋”ฐ๋ฅธ ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.


์บ๋Ÿฌ์…€์— ์Šค์™€์ดํ”„ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ!!

  • ๊ธฐ๋Šฅ1. ๋‚ด๊ฐ€ ๋“œ๋ž˜๊ทธํ•œ ๊ฑฐ๋ฆฌ๋งŒํผ ๋ฐ•์Šค๋„ ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ž„.

    • ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ??
      • ๋งˆ์šฐ์Šค ๋ˆ„๋ฅผ ๋•Œ์˜ X์ขŒํ‘œ์—์„œ ๋งˆ์šฐ์Šค ์›€์ง์ผ ๋•Œ์˜ X์ขŒํ‘œ๋ฅผ ๋นผ๋ฉด ๋‚˜์˜ค์ง€ ์•Š์„๊นŒ?
    <div>์บ๋Ÿฌ์…€์žˆ๋Š”๊ณณ</div>
    <script>
     $('.slide-box').eq(0).on('mousedown', function(e){
       e.clientX โ† ์ด๊ฑฐ๋ž‘
     });
    
     $('.slide-box').eq(0).on('mousemove', function(e){
       e.clientX โ† ์ด๊ฑฐ๋ฅผ ๋นผ์•ผํ• ๋“ฏ
     });
    </script>
    • ์—ฌ๊ธฐ์„œ ์ฒซ๋ฒˆ์งธ e.clientX์™€ ๋‘๋ฒˆ์งธ e.clientX๋ฅผ ๋นผ๋ฉด ์ด๋™๊ฑฐ๋ฆฌ์ธ๋ฐ
    • ๊ทธ๋Ÿฌ๋‚˜ ํ•จ์ˆ˜ ์•ˆ์˜ ๋ณ€์ˆ˜๋Š” ๋ฒ”์œ„๊ฐ€ ์žˆ์–ด์„œ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์“ธ ์ˆ˜ ์—†์Œ..
    • ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ํ•จ์ˆ˜๋ผ๋ฆฌ ๋ณ€์ˆ˜ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉด ํ•ด๊ฒฐ.
    <script>
     var ์‹œ์ž‘์ขŒํ‘œ = 0;
    
     $('.slide-box').eq(0).on('mousedown', function(e){
       ์‹œ์ž‘์ขŒํ‘œ = e.clientX;
     });
    
     $('.slide-box').eq(0).on('mousemove', function(e){
       console.log(e.clientX - ์‹œ์ž‘์ขŒํ‘œ)
     });
    </script>
    • ์‹œ์ž‘์ขŒํ‘œ ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ์ฃผ๊ณ  ๋งˆ์šฐ์Šค ํด๋ฆญ ์‹œ ํ˜„์žฌ ์ขŒํ‘œ๋ฅผ ์‹œ์ž‘์ขŒํ‘œ์— ์ €์žฅํ•ด๋‘ .
    • mousemove๋ผ๋Š” ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹œ์ž‘์ขŒํ‘œ ๋ž‘ ํ˜„์žฌ์ขŒํ‘œ์ธ e.clientX๋ฅผ ๋นผ๋ฉด ๋“œ๋ž˜๊ทธ ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ ๋‚˜์˜ด.
  • ๊ธฐ๋Šฅ2. ์† ๋†“์œผ๋ฉด ๋‘๋ฒˆ์งธ ์‚ฌ์ง„ ๋ณด์ž„(๋“œ๋ž˜๊ทธ ์–‘์— ๋”ฐ๋ผ)

    • ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ด๋™๊ฑฐ๋ฆฌ๋งŒํผ ๋ฐ•์Šค๋„ ์ด๋™ํ•˜๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑ.
    <script>
     var ์‹œ์ž‘์ขŒํ‘œ = 0;
    
     $('.slide-box').eq(0).on('mousedown', function(e){
       ์‹œ์ž‘์ขŒํ‘œ = e.clientX;
     });
    
     $('.slide-box').eq(0).on('mousemove', function(e){
       console.log(e.clientX - ์‹œ์ž‘์ขŒํ‘œ)
       $('.slide-container').css('transform', `translateX( ${e.clientX - ์‹œ์ž‘์ขŒํ‘œ}px )`)
     });
    </script>
    • translateX์„ ์กฐ์ ˆํ•˜๋ฉด ๋ฐ•์Šค๊ฐ€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ–ˆ์—ˆ์Œ.
    • ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ๋‚˜๋ฉด ๋งˆ์šฐ์Šค ํด๋ฆญ๋„ ์•ˆํ–ˆ๋Š”๋ฐ ๋ฐ•์Šค๊ฐ€ ์›€์ง์ด๊ณ  ์žˆ์„ํ…๋ฐ
    • ํด๋ฆญํ•˜๊ณ ๋‚˜์„œ๋งŒ ๋ฐ•์Šค๋ฅผ ์ด๋™ํ•ด๋‹ฌ๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ.
    <script>
     let ์‹œ์ž‘์ขŒํ‘œ = 0;
     let ๋ˆŒ๋ €๋ƒ = false;
    
     $('.slide-box').eq(0).on('mousedown', function(e){
       ์‹œ์ž‘์ขŒํ‘œ = e.clientX;
       ๋ˆŒ๋ €๋ƒ = true;
     });
    
     $('.slide-box').eq(0).on('mousemove', function(e){
       if (๋ˆŒ๋ €๋ƒ === true) {
         $('.slide-container').css('transform', `translateX( ${e.clientX - ์‹œ์ž‘์ขŒํ‘œ}px )`)
       }
     });
    </script>
    • ๋ˆŒ๋ €๋ƒ๋ผ๋Š” ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๊ทธ ๊ฐ’์€ true๊ฐ€ ๋˜๋ฉฐ,
    • ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์˜€์„ ๋•Œ ๋งŒ์•ฝ ๋ˆŒ๋Ÿฟ๋ƒ๋ผ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์ด true๋ฉด ์ฆ‰, ํด๋ฆญ์ด ๋ฌ๋‹ค๋ฉด
    • ๋ฐ•์Šค๋ฅผ ์ด๋™์‹œ์ผœ๋ผ ๋ผ๋Š” ์˜๋ฏธ์˜ ์ฝ”๋“œ ์ž‘์„ฑ.

๐Ÿ’ฅ ์ฐธ๊ณ ์‚ฌํ•ญ!

  • onmouse์ด๋ฒคํŠธ ๊ด€๋ จ ํ•ด๋‹น ์ด๋ฒคํŠธ๋“ค ์•ˆ์—์„œ e.clientX๋ผ๋Š” ๊ฒƒ์€ ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์˜ X์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  • ๊ทธ๋Ÿผ e.clientY๋Š” ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์˜ Y์ขŒํ‘œ๋ฅผ ๋œปํ•จ.

์˜ˆ์‹œ)

  $('.slide-box').eq(0).on('mousemove',function(e){
   console.log(e.clientX)
 })
  • ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋งˆ์šฐ์Šค ์ด๋™๊ฑฐ๋ฆฌ๋งŒํผ ๋ฐ•์Šค ์ด๋™ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ๋ฐ˜๋Œ€๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๋• ์„๋•Œ ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ 100 ์ด์ƒ์ด๋ฉด 2๋ฒˆ ์‚ฌ์ง„์„, 100 ๋ฏธ๋งŒ์ด๋ฉด 1๋ฒˆ ์‚ฌ์ง„์œผ๋กœ ๋Œ์•„์˜ค๋„๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•ด๋ณด๋ ค๊ณ  ํ•จ.

<script>
  (์ƒ๋žต)

  $('.slide-box').eq(0).on('mouseup', function(e){
    ๋ˆŒ๋ €๋ƒ = false;

    if (e.clientX - ์‹œ์ž‘์ขŒํ‘œ < -100) {
      $('.slide-container').css('transform', 'translateX(-100vw)');
    } else {
      $('.slide-container').css('transform', 'translateX(0vw)');
    }
  });
</script>

์Šคํฌ๋กค๋ฐ” ๋งŒ๋“ค๊ธฐ!

  • window.addEventListener('scroll',function(){}

    • ์—ฌ๊ธฐ์„œ scroll์ด๋ผ๋Š” ์ด๋ฒคํŠธ๋Š” ์™ผ์ชฝ์— ์žˆ๋Š” ์• ๊ฐ€ ์Šคํฌ๋กค ๋ ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ.
    • window๋Š” document๋ณด๋‹ค ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–์Œ. ๊ทธ๋ฆฌ๊ณ  scroll์€ ์ฃผ๋กœ window์™€ ์‚ฌ์šฉ๋จ.
    • window.scrollY : ์œ ์ €๊ฐ€ ์–ผ๋งˆ๋‚˜ ์Šคํฌ๋กค๋ฐ”๋ฅผ ๋‚ด๋ ธ๋Š”์ง€ px๋‹จ์œ„๋กœ ์•Œ๋ ค์คŒ.
    • window.scrollX : ๊ฐ€๋กœ๋กœ ์–ผ๋งˆ๋‚˜ ์Šคํฌ๋กคํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. (๊ฐ€๋กœ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์žˆ์œผ๋ฉด)
    • window.scrollTo(x, y) : ๊ฐ•์ œ๋กœ ์Šคํฌ๋กค๋ฐ”๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ) window.scrollTo(0, 100) : ์œ„์—์„œ๋ถ€ํ„ฐ 100px ์œ„์น˜๋กœ ์Šคํฌ๋กค
    • window.scrollBy(x, y) : ํ˜„์žฌ ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ์Šคํฌ๋กค
      • ์˜ˆ์‹œ) window.scrollBy(0, 100) : ํ˜„์žฌ ์œ„์น˜์—์„œ๋ถ€ํ„ฐ +100px ๋งŒํผ ์Šคํฌ๋กค
  • jQuery ๋ฒ„์ „์€ ๋” ๊ฐ„ํŽธํ•จ..

    • $(window).scrollTop() : ํ˜„์žฌ ํŽ˜์ด์ง€ ์Šคํฌ๋กค ์–‘์„ ์•Œ๋ ค์คŒ.
    • $(window).scrollTop(100) : ํŽ˜์ด์ง€ ๊ฐ•์ œ์ด๋™๋„ ํ•ด์คŒ

    ๐Ÿ’ฅ์ฐธ๊ณ ์‚ฌํ•ญ!!

    overflow: scroll : ๋‚ด์šฉ๋ฌผ์ด ๋„˜์น˜๋ฉด ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ƒ์„ฑํ•ด์คŒ.
    document.querySelector('.lorem').scrollTop : lorem์ด๋ผ๋Š” ํด๋ž˜์Šค๋ช…์„ ๊ฐ€์ง„ div๋ฐ•์Šค ์Šคํฌ๋กค ์–‘
    ํ˜„์žฌ ํŽ˜์ด์ง€ ์Šคํฌ๋กค์€ scrollY๋ฅผ ์“ฐ์ง€๋งŒ ์ผ๋ฐ˜ div๋ฐ•์Šค ๊ฐ™์€๊ฑฐ์—๋Š” scrollTop๋ฅผ ์‚ฌ์šฉ.
    ์…€๋ ‰ํ„ฐ.scrollHeight : div์˜ ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์‹ค์ œ ๋†’์ด
    ์…€๋ ‰ํ„ฐ.clientHeitght : ๋ˆˆ์— ๋ณด์ด๋Š” div ๋†’์ด
    ์Šคํฌ๋กค ์–‘์€ div์˜ ๋†’์ด์™€๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ ์ด์œ ๋Š” ๋ˆˆ์— ๋ณด์ด๋Š” div๋ฐ•์Šค ๋†’์ด๋งŒํผ์€ ์Šคํฌ๋กค ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ.
    ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— div์˜ ์Šคํฌ๋กค๋ฐ” ๋‚ด๋ฆฐ ์–‘ + ๋ˆˆ์— ๋ณด์ด๋Š” div๋ฐ•์Šค ๋†’์ด == div์˜ ์‹ค์ œ ๋†’์ด

    • ์˜ˆ์‹œ) ์Šคํฌ๋กค๋ฐ”๋ฅผ 100px์ด์ƒ ๋‚ด๋ฆฌ๋ฉด ๋กœ๊ณ  ํฐํŠธ์‚ฌ์ด์ฆˆ ์ค„์ด๊ณ  100px ๋ฏธ๋งŒ์ด๋ฉด ๋‹ค์‹œ ๋Š˜๋ฆฌ๊ธฐ

      window.addEventListener('scroll',function(){
        if(window.scrollY>=100){
          document.querySelector('.navbar-brand').style.fontSize = '20px'
        }else if(window.scrollY<100){
          document.querySelector('.navbar-brand').style.fontSize = '30px'
         }       
         })
      • ์Šคํฌ๋กค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋งŒ์•ฝ ํ˜„์žฌ ์Šคํฌ๋กค๋ฐ” ๋†’์ด๊ฐ€ 100px์ด์ƒ์ด๋ผ๋ฉด ํฐํŠธ ์‚ฌ์ด์ฆˆ๋ฅผ 20px๋กœ ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ๋งŒ์•ฝ ํ˜„์žฌ ์Šคํฌ๋กค๋ฐ” ๋†’์ด๊ฐ€ 100px ๋ฏธ๋งŒ์ด๋ผ๋ฉด ํฐํŠธ์‚ฌ์ด์ฆˆ๋ฅผ 30px๋กœ ๋Š˜๋ฆฐ๋‹ค.
    • ํšŒ์›์•ฝ๊ด€(div์•ˆ์—)์„ ๋‹ค ์ฝ์œผ๋ฉด alert์ฐฝ์ด ๋‚˜์˜ค๊ฒŒ๋”.

      document.querySelector('.lorem').addEventListener('scroll',function(){
       const scroll์–‘ = document.querySelector('.lorem').scrollTop
       const ์‹ค์ œ๋†’์ด = document.querySelector('.lorem').scrollHeight
       const div๋†’์ด = document.querySelector('.lorem').clientHeight
         
      if(scroll์–‘+div๋†’์ด==์‹ค์ œ๋†’์ด){
        alert('ํšŒ์›์•ฝ๊ด€ ํ™•์ธ ์™„๋ฃŒ')
      }
      })
      • lorem์ด๋ผ๋Š” ํด๋ž˜์Šค ๋ช…์„ ๊ฐ€์ง„ <div>์— ์Šคํฌ๋กค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ,
      • ํ˜„์žฌ ์Šคํฌ๋กค์–‘๊ณผ ๋ˆˆ์— ๋ณด์ด๋Š” ๋ฐ•์Šค์˜ ๋†’์ด๊ฐ€ ์‹ค์ œ ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ๋†’์ด์™€ ๊ฐ™๋‹ค๋ฉด
      • alert ๋„์›Œ์ค˜.

โ“ scroll ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

    1. scroll ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ์•ˆ์˜ ์ฝ”๋“œ๋Š” 1์ดˆ์— 60๋ฒˆ ์ด์ƒ ์‹คํ–‰๋จ.
    2. ๋ฐ”๋‹ฅ ์ฒดํฌ๋„ ์—ฌ๋Ÿฌ๋ฒˆ ์ค‘๋ณต์œผ๋กœ ํ•ด์ค„ ๋•Œ๊ฐ€ ์žˆ์Œ.. ๊ทธ๋ž˜์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ.

0๊ฐœ์˜ ๋Œ“๊ธ€