본문 바로가기

강의메모

220718_dockMenu data json ver.

 

<problem>

기존에 html상에 존재하던 개별 li를 targeting했던 것을

>> data 파일로 뿌려 만들면서, dockMenuList("#dockMenu ul li")로 접근할 수 없어 애니메이션 효과가 작동하지 않음.

 

 

 

 

<solve point>

  • ul > li 이벤트 위임
  • 먼저 함수 한 번 호출하기 (target 대상이 존재하지 않는 상태에서 효과를 적용시킬 수 없다!)

 

 

<process>

 

 

1. 데이터 뿌리기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const dockMenu = $("#dockMenu ul");
$.ajax({ url: "data/stack.json" }).done(function (response) {
        console.log(response);
        const stacks = response.stacks;
        let tempHtml = "";
        $.each(stacks, function (idx, item) {
          tempHtml += `<li data-txt=${item.title} data-percent=${item.num} data-bg=${item.bg}>
            <a href=""><span>${item.title}</span></a>
          </li>
          `;
        });
        console.log(tempHtml);
        dockMenu.html(tempHtml);
      });
cs

 

 

 

2. li 들이 아래로 떨어지는 firstMotion 효과 주기

    1) 데이터 뿌려주기를 함수로 묶기 ; makedockMenu() > 먼저 한 번 호출

    2) firstMotion 애니메이션 > 함수로 묶기 ; firstMotion()

    3) makedockMenu() 안에 firstMotion() 넣기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const dockMenu = $("#dockMenu ul");
function makeDockMenu() {
      $.ajax({ url: "data/stack.json" }).done(function (response) {
        ...
        console.log(tempHtml);
        dockMenu.html(tempHtml);
        firstMotion();
      });
    }
...
 makeDockMenu();
    function firstMotion() {
      gsap.from($("#dockMenu ul li"), {
        y: -300,
        opacity: 0,
        duration: 1.5,
        ease: "bounce",
        stagger: { each: 0.1 },
      });
    }
cs

 

 

 

3. secondMotion, click part >> 이벤트 위임

  - dockMenu에서 가상의 data로 뿌려놓은 li로 접근하여 이벤트 효과를 주기 위해 '위임' 해주기

 

1
2
3
4
5
6
7
8
9
dockMenu.on("mouseenter", "li", function () {
        ...
      });
dockMenu.on("mouseleave", "li", function () {
        ...
      });
dockMenu.on("click", "li", function () {
      ...
    });
cs

 

 

 

4. mouseenter, mouseleave event >> secondMotion() 으로 묶기 /

   firstMotion 효과가 끝나고(onComplete) 작동하도록 타이밍 조정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function firstMotion() {
      gsap.from($("#dockMenu ul li"), {
        ...
        onComplete: function () {
          // console.log("모션이 끝났습니다.");
          secondMotion();
        },
      });
    }
 
...
 
function secondMotion() {
      dockMenu.on("mouseenter", "li", function () {
        ...
      });
      dockMenu.on("mouseleave", "li", function () {
        ...
      });
    }
cs

 

 

 

 

 

'강의메모' 카테고리의 다른 글

220713  (0) 2022.07.13
AngularApp cli 설치 명령문 정리  (0) 2022.07.11
★ 220630 오후강의 process 정리  (0) 2022.06.30
22.0616~0620  (0) 2022.06.16
day 28  (0) 2022.06.09