iPad - Apple (PCํ˜•, renewal)

Jiwon Hwangยท2023๋…„ 3์›” 27์ผ
0

portpolio

๋ชฉ๋ก ๋ณด๊ธฐ
1/4

๐Ÿ“š Summary

์‚ฌ์ดํŠธ๋ช… : iPad Apple (PCํ˜•, renewal)
์ž‘์—… ๊ธฐ๊ฐ„ : 23.03.01 ~ 23.03.03 (3์ผ ์†Œ์š”)
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : gsap, jquery
์œ ํ˜• : PC ์ ์‘ํ˜•, ๋ฆฌ๋‰ด์–ผ
ํŠน์ง• : gsap๋ฅผ ํ™œ์šฉํ•ด ๋‹ค์–‘ํ•œ ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ๋™์ ์ธ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.

โœ”๏ธ Main Point

  • ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ ํ…์ŠคํŠธ ํˆฌ๋ช…๋„ ์กฐ์ ˆ ScrollTrigger & GSAP timeline
  • @KeyFrames animation์œผ๋กœ ๋กค๋ง๋ฐฐ๋„ˆ ๋งŒ๋“ค๊ธฐ
  • ๊ณ ์ •๋œ ์œ„์น˜์—์„œ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜ sticky & eachํ•จ์ˆ˜
  • Pin-spacer๋กœ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„
  • ๊ณตํ†ต element์š”์†Œ์— ๋ชจ์…˜ ์ฃผ๊ธฐ - eachํ•จ์ˆ˜



1. ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ ํ…์ŠคํŠธ ํˆฌ๋ช…๋„

โ—ป๏ธ SCRIPT

$(function(){
  mainVis = gsap.timeline({
    scrollTrigger:{
      trigger:".main-visual",
      start:"10% 10%",
      end : "100% 0%",
      scrub : 1 //์Šคํฌ๋กค ์™”๋‹ค๊ฐ”๋‹ค ํ• ๋•Œ๋งˆ๋‹ค ํšจ๊ณผ์ฃผ๊ธฐ
    },
  })
    mainVis
    .to('.main-visual .text-area > *',{
      y: -100, opacity : 0, //y์ถ•์œผ๋กœ ์˜ฌ๋ฆฌ๊ธฐ , ํˆฌ๋ช…ํ•˜๊ฒŒ 
      stagger:0.1 //์ˆœ์ฐจ์ ์œผ๋กœ ํšจ๊ณผ์ฃผ๊ธฐ 
    })

๐Ÿ”Ž ์ฝ”๋“œ๋ถ„์„

  • gsap.timeline : ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด ์คŒ
  • scrollTrigger : gsap์—์„œ ํŒŒ์ƒ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ. gsap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/ScrollTrigger.min.js"></script>
  • scrub : ์Šคํฌ๋กค์„ ์œ„์•„๋ž˜๋กœ ์›€์ง์ผ ๋•Œ์—๋„ ๋ชจ์…˜์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • stagger : text-area์˜ ์ž์‹ ์š”์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ


2. @KeyFrames๋กœ ๋กค๋ง๋ฐฐ๋„ˆ ๋งŒ๋“ค๊ธฐ

๐Ÿ“‹ ๋ช‡๊ฐ€์ง€์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ , ์šฐ์ธก์—์„œ๋ถ€ํ„ฐ ์ž๋™์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ํšจ๊ณผ๋ฅผ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

โ—ป๏ธ HTMl

<ul class="first-wrap">
   <li><span>Magic Keyboard Folio</span></li>
   <li><span> iPadOS</span></li>
   <li><span>A14 Bionic Chip</span></li>
   <li><span>12MP Wide Camera</span></li>

   <li><span>Magic Keyboard Folio</span></li>
   <li><span> iPadOS</span></li>
   <li><span>A14 Bionic Chip</span></li>
   <li><span>12MP Wide Camera</span></li>

   <li><span>Magic Keyboard Folio</span></li>
   <li><span> iPadOS</span></li>
   <li><span>A14 Bionic Chip</span></li>
   <li><span>12MP Wide Camera</span></li>

   <li><span>Magic Keyboard Folio</span></li>
   <li><span> iPadOS</span></li>
   <li><span>A14 Bionic Chip</span></li>
   <li><span>12MP Wide Camera</span></li>
                        
   <li><span>Magic Keyboard Folio</span></li>
   <li><span> iPadOS</span></li>
   <li><span>A14 Bionic Chip</span></li>
   <li><span>12MP Wide Camera</span></li>
</ul>
<ul class="last-wrap">
</ul>

โ—ป๏ธ CSS

/* main-roll */
.main-roll { overflow: hidden; } 
.main-roll .group-roll { display: flex; } 
.main-roll .group-roll ul { 
display: flex; animation: roll 30s linear infinite; }
@keyframes roll { 
 0% { transform: translateX(0%); } 
                     /* x์ถ•์œผ๋กœ -100๋งŒํผ */
 100% { transform: translateX(-100%); } 
 }

๐Ÿ”Ž ์ฝ”๋“œ๋ถ„์„

  • 1๋ฒˆ ๋ผ์ธ ๊ธธ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ (์ฒ˜์Œ์— ๋‚˜์™€์žˆ๋Š” ํ…์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ์ด ๊ธธ์–ด์•ผํ•จ)
  • 1๋ฒˆ์˜ ๋ผ์ธ์˜ ์—๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚ฌ์„๋•Œ์˜ ์ง€์ ์ด ์ƒ๊น€
  • 1๋ฒˆ ๋ผ์ธ๋งŒ ์žˆ๋‹ค๋ฉด ๋๋‚œ์ง€์ ์—์„œ๋ถ€ํ„ฐ ๋ผ์ธ์ด ๋ณด์ด์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์—
    ๋ผ์ธ์„ ํ•œ ๊ฐœ ๋” ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • 1๋ฒˆ์˜ ์—๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚œ ์‹œ์ ์— 2๋ฒˆ๋ผ์ธ์˜ ํ…์ŠคํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์ž๋™์œผ๋กœ ๊ณ„์† ๋Œ์•„๊ฐ€๋Š” ์—๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ „์ฒด ์˜์—ญ์ธ main-roll์—๋‹ค๊ฐ€, ์•ˆ์— ๋กค๋“ค์ด ๋„˜์น˜์ง€ ์•Š๋„๋ก overflow:hidden์„ ์ค€๋‹ค.
  • @Keyframes์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  • ๊ฐ ํ•„์š”ํ•œ ๋กค๋ง์— ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉ์‹œํ‚จ๋‹ค.
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ infinite๋กœ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด์ค€๋‹ค.


3. position:sticky ์Šคํฌ๋กค

โ—ป๏ธ CSS

/* .main-card css */
.main-card .card-inner { position: relative; height: 350vh; } 
.main-card .group-card { height: 100vh; padding: 50px; font-size: 90px; } 
.main-card .group-card.card01 { position: sticky; top:0; } 
.main-card .group-card.card01 .content-area { background: #f6a1d6; } 
.main-card .group-card.card02 { position: sticky; top:4vh; } 
.main-card .group-card.card02 .content-area { background: #f9f385; } 
.main-card .group-card.card03 { position: sticky; top:8vh; } 
.main-card .group-card.card03 .content-area { background: #96c6f5; } 

โ—ป๏ธ SCRIPT

        // * main-card
 //each(function(index,element) : ํ•˜๋‚˜๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค 
    $('.main-card .group-card').each(function(index,element){
        //๋ณ€์ˆ˜๊ฐ€ ๋จผ์ € ์ฝํ˜€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ ๋จผ์ € ์จ์ฃผ๊ธฐ 
         op = (index == 2)? 1 : 0.5; 
 
      gsap.to(element,{
        scrollTrigger:{
          trigger:element,
          start:"0% 10%",
          end : "100% 0%",
          scrub : 1
        },
        opacity: op,
        scale : 0.97
    })
    })
  • ์กฐ๊ฑด๋ฌธ ์ค„์—ฌ์“ฐ๊ธฐ
  if(index == 2 ){
        op = 1;
       }else{
        op = 0.5;
       }
  • ํ•ด๊ฒฐ๋ฐฉ์•ˆ
       // - ๋ณ€์ˆ˜๋ฅผ ๋จผ์ €์“ฐ๊ณ  ์กฐ๊ฑด์“ฐ๊ธฐ 
      op = (index == 2)? 1 : 0.5; 
                    //  if : else

๐Ÿ”Ž ์ฝ”๋“œ๋ถ„์„

  1. ์ „์ฒด์˜์—ญ์€ ํŒจ๋”ฉ๊ฐ’๋งŒ ์กฐ์ ˆํ•ด์ค€๋‹ค.
  2. ์Šคํฌ๋กคํ•˜๋ฉด์„œ ์˜ฌ๋ผ์˜ฌ ์˜์—ญ์— Position: sticky๋กœ ์Šคํฌ๋กคํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์˜์—ญ์œผ๋กœ ์˜ฌ๋ผ์˜ค๋„๋ก ์„ค์ •ํ•ด์ค€๋‹ค.
  3. .group-card3๊ฐœ๊ฐ€ ๋‹ค ํŽผ์ณ์ง„ ๋†’์ด๊ฐ’์„ ์ ์šฉํ•ด์ฃผ๊ธฐ ์œ„ํ•ด .card-inner ์˜ ๋†’์ด๋ฅผ 300vh + sticky ์˜ ๋ชจ์…˜์„ ์—ฌ์œ ์žˆ๊ฒŒ ๋ณด์ด๊ธฐ ์œ„ํ•ด ๋†’์ด๋ฅผ '350vh'๋กœ ์„ค์ •
  4. class ๋ฅผ ์ด์šฉํ•ด ํฌ๊ฒŒ div๋ฅผ 3๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๊ณ ,.card-inner ์˜ 3์นธ
    ๊ฐ„๊ฒฉ์œผ๋กœ sticky ๋ชจ์…˜ ํšจ๊ณผ์˜ ์œ„์น˜๋ฅผ ๊ฐ๊ฐ ๋‹ฌ๋ฆฌ ์ฃผ๊ธฐ ์œ„ํ•ด top์˜ ๊ฐ’์„ 0vh, 4vh, 8vh๋กœ ์„ค์ •
  • ๋ฐ˜๋ณต๋ฌธ์„ ์“ฐ๋Š” ์ด์œ !
    ์†Œ์Šค๊ฐ€ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ์š”์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • index : .group-card ์˜ ์ˆœ์„œ (0-1-2)


4. Pin-spacer๋กœ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„

๐Ÿ“‹ ์Šคํฌ๋กค ํŠธ๋ฆฌ๊ฑฐ์™€ pin์œผ๋กœ ์•„๋ž˜์˜ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.
ํŠน์ • ์˜์—ญ์— ๋ฉˆ์ท„๋‹ค๊ฐ€ ๊ฐ€๋กœ์Šคํฌ๋กค๋กœ ๋ณ€๊ฒฝ
๊ฐ€๋กœ์Šคํฌ๋กค ์‹คํ–‰ ํ›„, ํ•œ ์˜์—ญ์€ ์‚ฌ๋ผ์ง€๋ฉด์„œ ๋ฐฐ๊ฒฝ์ปฌ๋Ÿฌ ๋ณ€๊ฒฝ
๋ฉ”์ธ๋‚ด์šฉ ๋๊นŒ์ง€ ๊ฐ€๋กœ์Šคํฌ๋กค ์œ ์ง€ ํ›„, ๋‹ค์Œ ์˜์—ญ์œผ๋กœ ์„ธ๋กœ์Šคํฌ๋กค ์ง„ํ–‰

โ—ป๏ธ SCRIPT ์ˆ˜์ • ์ „

1. gsap ๊ธฐ์ค€ ์žก๊ธฐ

 // main-overview
                  //timeline : ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ ์š”์†Œ๋“ค ๋ชจ์…˜์ฃผ๊ธฐ 
    overview = gsap.timeline({
      scrollTrigger:{
        trigger:".main-overview .contents_wrap",
        start:"0% 0%",
        end : "300% 0%",// 300% : ๊ธฐ๋ณธ 100% ์„ ์ฃผ๋ฉด ๋ชจ์…˜์ด ๋„ˆ๋ฌด ๋นจ๋ฆฌ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— 300%๋กœ ๋Š˜๋ ค์คŒ (์Šคํฌ๋กค 3๋ฐฐ์˜ ํšจ๊ณผ๋ฅผ ๊ฐ•์ œ๋กœ ์ค„ ์ˆ˜ ์žˆ์Œ)
        scrub : 1,
     // pin : ์Šคํฌ๋กค๋‚ด๋ฆฌ๋‹ค๊ฐ€ ๊ฐ€์šด๋ฐ์—์„œ ๊ณ ์ •ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋„˜์–ด๊ฐ, ( = sticky)
        pin : true
      },
    })

2. ์™ผ์ชฝ ์˜์—ญ js

    overview 
    // addLabel : ๋™์‹œ์— ํšจ๊ณผ ์ฃผ๊ธฐ ์œ„ํ•ด labeling
    .addLabel('a')
    .to('.main-overview .container_wrap',{
      xPercent:-50, // ๋‚ดํ™”๋ฉด์˜ ์ ˆ๋ฐ˜๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ 
      yPercent:-25  // ์œ„๋กœ -25๋งŒํผ ์ด๋™์‹œ์ผœ์ฃผ๊ธฐ 
    },'a')
    .to('.main-overview',{
      background : '#444'  // ์œ„์น˜ ์ด๋™๊ณผ ๋™์‹œ์— ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€ํ™”์ฃผ๊ธฐ 
    },'a')
    .to('.main-overview .column-left, .main-overview .desc-wrap',{
      opacity : 0
    },'a')  // ์™ผ์ชฝ ์˜์—ญ๊ณผ ์„ค๋ช…๊ธ€ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๊ธฐ 

3. ์˜ค๋ฅธ์ชฝ ์˜์—ญ js

  // addlable์ด ๋๋‚˜๊ณ  ๋ชจ์…˜ ์‹คํ–‰๋Œ 
    .to('.main-overview .container_wrap .slide-list',{
      xPercent: -50, //๋‚ด ์˜์—ญ์—์„œ ์ ˆ๋ฐ˜๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
      delay : 1, // ์Šคํฌ๋กค ์ž ๊น ๋ฉˆ์ถค 
    })
    .to('.main-overview',{
      background : '#fff'
    })

๐Ÿ’ฃ ๋ฌธ์ œ์ 

  • ํšก ์Šคํฌ๋กค ์ด์Šˆ : ์˜ค๋ฅธ์ชฝ์˜ ๋ชจ์…˜์ด ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋๋‚˜๋Š”๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค.

โ—ป๏ธ SCRIPT ์ˆ˜์ • ํ›„

    // main-overview
    overview = gsap.timeline({
      defaults:{
        ease: "none", // <-- ์ด๊ฑธ๋„ฃ์–ด์•ผ ํšก์Šคํฌ๋กค ์ขŒํ‘œ๊ฐ€ ์•ˆ๋ฐ€๋ฆผ!
      },
      scrollTrigger:{
        trigger:".main-overview .group-contents",
        start:"0% 0%",
        end : "300%",
        scrub : 1,
        invalidateOnRefresh: true, //ํ™”๋ฉด ๋ฆฌ์‚ฌ์ด์ง• 
        pin : true,
      },
    })
    overview
    .addLabel('a')
    .to('.main-overview .container-area .left-wrap',{
      xPercent:-100,
      yPercent:-50
    },'a')
    .to('.main-overview .container-area .right-wrap',{
      x:-$('.main-overview .container-area .left-wrap').outerWidth() //left-wrap์˜ outerWidth๋งŒํผ x์ถ•์œผ๋กœ ๋นผ์ฃผ์—ˆ๋‹ค. 
      yPercent:-25
      // // xPercent:-100,
      // // x:-700,
    },'a')
    .to('.main-overview .container-area .slide-box',{
      xPercent: -100,
      x:function(){
        return window.innerWidth; // ์ฐฝ์˜ ํฌ๊ธฐ๋งŒํผ๋„ ์ด๋™์‹œ์ผœ์ฃผ๊ธฐ
      },
      // delay : 1,
    })

๐Ÿ”Ž ์ฝ”๋“œ๋ถ„์„

  1. ์ „์ฒด ์˜์—ญ์—์„œ ๊ณ ์ •๋˜์–ด์•ผํ•  ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ค€๋‹ค.
  2. ํ•ด๋‹น ํƒœ๊ทธ .main-overview .group-contents๋ฅผ ๊ธฐ์ค€์œผ๋กœ timeline scrollTrigger๋ฅผ ์ ์šฉ์‹œํ‚จ๋‹ค.
  3. ๋งŒ๋“ค์–ด์ง„ ํƒ€์ž„๋ผ์ธ์„ overview ๋ผ๋Š” ์ƒ์ˆ˜๋กœ ๋‹ด๋Š”๋‹ค.
  4. overview ์„ ๊ธฐ์ค€์œผ๋กœ gsap.to๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์˜์—ญ๋งˆ๋‹ค์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉ์‹œํ‚จ๋‹ค.
  • window.innerWidth;๋ฅผ ๊ทธ๋ƒฅ ์“ฐ๋ฉด ์•ˆ๋˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์„œ ์จ์•ผํ•จ
function(){
        return window.innerWidth; 
  • .outerWidth() : ์š”์†Œ์˜ width ๊ฐ’๊ณผ padding ๊ฐ’๊ณผ border ๊ฐ’์„ ๋”ํ•œ ๊ฐ’.


5. ๊ณตํ†ต element์š”์†Œ์— ๋ชจ์…˜ ์ฃผ๊ธฐ - eachํ•จ์ˆ˜

โ—ป๏ธ HTML

<div class="icons_area">
  <div class="icon icon-01" data-y="150">
    <img src="./assets/images/icon/floationg-icon01.png" alt>
  </div>
  <div class="icon icon-02" data-y="-150">
    <img src="./assets/images/icon/floationg-icon02.png" alt>
  </div>
  <div class="icon icon-03" data-y="150">
    <img src="./assets/images/icon/floationg-icon03.png" alt>
  </div>
  <div class="icon icon-04" data-y="-150">
    <img src="./assets/images/icon/floationg-icon04.png" alt>
  </div>
  <div class="icon icon-05" data-y="150">
    <img src="./assets/images/icon/floationg-icon05.png" alt>
  </div>
  <div class="icon icon-06" data-y="-150">
    <img src="./assets/images/icon/floationg-icon06.png" alt>
  </div>
  <div class="icon icon-07" data-y="150">
    <img src="./assets/images/icon/floationg-icon07.png" alt>
  </div>
  <div class="icon icon-08" data-y="-150">
    <img src="./assets/images/icon/floationg-icon08.png" alt>
  </div>
</div>

โ—ป๏ธ SCRIPT

    // main-floating
    $('.main-floating .group-icon .icon').each(function(index,element){
      gsap.to(element,{
        scrollTrigger:{
          trigger:'.main-floating',
          start : "0% 100%",
          end : "100% 0%",
          scrub : 1,
        },
         y:element.dataset.y 
      })
    })

๐Ÿ”Ž ์ฝ”๋“œ๋ถ„์„

  • ์Šคํฌ๋กค ์‹œ์— ๊ฐ๊ฐ์˜ ์•„์ด์ฝ˜์ด ์–ด๋–ค ๊ฒƒ์€ ์œ„๋กœ, ์–ด๋–ค ๊ฒƒ์€ ์•„๋ž˜๋กœ ์ด๋™๋˜๋Š” ๋ชจ์…˜์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ์˜ element ์š”์†Œ์— ๋ฐ์ดํ„ฐ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ์ฃผ์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. data-y="150"
  • index : .group-icon ์˜ ์ˆœ์„œ
  • element : .group-icon ๊ฐ๊ฐ์˜ ์š”์†Œ
  • y:element.dataset.y : ๊ฐ๊ฐ ์š”์†Œ์˜ data y๊ฐ’๋งŒํผ y๊ฐ’์„ ์›€์ง์ธ๋‹ค.
profile
Web Publisher

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