View

순차적 애니메이션 동작하도록 만들기(GSAP)

elments.forEach((element, idx) => {
  gsap.to(element, 1, {
    delay: (idx + 1) * 0.7,
    opacity: 1,
  });
});

idx는 0부터 시작하므로 +1 해주어 0.7, 1.4, 2.1, 2.7 .... 과 같은 delay(지연시간)을 두고 동작하게 된다.

 

요소가 최대한 줄어들어있을때 최대 크기를 가지도록 설정

부모요소가 flex이고, 대상요소가 width 값이 따로 없을 때에는 최대한 줄어들어 화면에 표시되지 않게 되는데,  이 경우 flex-grow 속성으로 최대한의 width를 차지하도록 설정할 수 있다. (flex-grow:1;)

flex내 높이는 최대한 늘어나려고 한다(align-items 기본값은 stretch)

수직 슬라이드 만들기 - Swiper 이용하기

참고링크 : https://swiperjs.com/

<link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css"
/>

<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>

<!--중략-->

<!-- Slider main container -->
<div class="swiper">
  <!-- Additional required wrapper -->
  <div class="swiper-wrapper">
    <!-- Slides -->
    <div class="swiper-slide">Slide 1</div>
    <div class="swiper-slide">Slide 2</div>
    <div class="swiper-slide">Slide 3</div>
    ...
  </div>
  <!-- If we need pagination -->
  <div class="swiper-pagination"></div>

  <!-- If we need navigation buttons -->
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>

  <!-- If we need scrollbar -->
  <div class="swiper-scrollbar"></div>
</div>

new Swiper(선택자, 옵션); 형태로 작성

new Swiper(".element", {
  direction: "vertical",
  autoplay: true,
  loop: true,
});
new Swiper(".promotion .swiper-container", {
  // direction: "horizontal", // 기본값이므로 생략 가능
  slidesPerView: 3, // 슬라이드에 보여질 개수
  spaceBetween: 10, // 슬라이드 간격(여백)
  centeredSlides: true, // 첫 번째 슬라이드를 가운데에 표시
  loop: true, // 반복
});

autoplay 에서 속도 기본값은 3000(ms단위)이다. autoplay: true;로 작성했던 것을 객체 형태로 autoplay설정을 해 줄 수 있다.

autoplay: {
    delay: 5000,
},

pagination 처리하기

  pagination: { 
  el: ".swiper-pagination",  // 페이지 표시 요소
  clickable: true, // 클릭으로 페이지 변경 가능한지 
  },

navigation 생성하기

navigation: {
    prevEl: ".swiper-prev",
    nextEl: ".swiper-next",
  },

여러 요소에 같은 스타일 지정하기

.el1, .el2 {
  width: 42px;
}

2:1 사이즈의 엘리먼트 만들기

  • 요소는 세로높이는 최대한 줄어드려고 한다.
  • 부모요소의 가로너비 만큼을 전부 사용하겠다 👉 자식에서 width: 100%; 으로 지정
  • height: 0;인 상태에서 padding-top: 50%;을 주게 되면
  • 부모의 width크기의 50% 만큼을 padding-top에 준다.
  • 부모 - 자식 요소 비율을 이용하여 유튜브 영상등을 삽입할 수 있다. 

16:9 의 경우에는 padding-top: 56.25(100: 56.25 👉 16:9)

 

youtube 삽입하기 

출처 https://developers.google.com/youtube/iframe_api_reference?hl=ko 

<div id="player"></div>

script 태그 이전에 firstScriptTag를 추가한다.

// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

youtube iframe api를 이용하면 자바스크립트를 이용하여 제어할 수 있다

(플레이어를 삽입-소스코드복사-하는 것과 다르게 자동으로 재생되게 하거나, 반복재생되거나 하는 동작들을 JavaScript로 제어할 수 있다.)

function onYouTubeIframeAPIReady() { // api에서 이용하는 함수명이므로 변경해서는 안된다.
  // <div id="player"></div>
  new YT.Player("player", {
    videoId: "ID", // 최초 재생할 youtube 의 영상 ID
    playerVars: {
      autoplay: true,
      loop: true,
      playlist: "ID", // 반복재생할 영상의 ID 목록
    },
    events: {
      onReady(e) {
        e.target.mute();
      },
    },
  });
}

위와 같은 형태로 작성해 볼 수 있다.

 

gsap 애니메이션의 ease 속성을 지정하기

https://greensock.com/docs/v2/Easing

ease 애니메이션 처리를 시각화하여 보여준다.

 

css 속성을 이용한 패럴렉스스크롤

  background-image: url("이미지경로");
  background-repeat: no-repeat;
  background-position: center;
  background-attachment: fixed;
  background-size: cover;

 

마우스 hover시 요소 뒤집기 효과

CSS만으로 만들 수 있다.

.container {
/*   원근법이용, 3차원 효과 */
  pespective: 300px;
}

.container .item {
  width: 100px;
  height: 100px;
/*  뒤 요소를 가리기  */
  backface-visibility: hidden;
  transition: 1s;
}

.container .item.front {
/*  요소를 겹치게 하는 용도  */
  position: absolute;
/*  명시적으로 0도에서 시작함을 알려주기  */
  transform: rotateY(0deg);
}

.container:hover .item.front {
  transform: rotateY(180deg);
}

.container .item.back {
/*  요소를 180도 뒤집기  */
  transform: rotateY(-180deg);
}

.container:hover .item.back {
/*   원래 각도로 돌리기 */
  transform: rotateY(0deg);
}

꼭 필요한 CSS 속성만 남겨놓은 코드이다.

코드를 보면 알 수 있다시피, transform으로 뒷면이 될 요소를 처음부터 180도 돌려놓은 후

backface-visibility를 통해 뒷면을 가려준다.

원하는 동작(여기서는 hover)이 일어날때에 앞면을 180도 회전시키고, 뒷면을 0도로 돌려준다.

transition과 perspective를 이용하여 자연스러운 애니메이션 효과를 추가한다.

 

scrollMagic 라이브러리 사용하기

https://cdnjs.com/libraries/ScrollMagic

const elements = document.querySelectorAll(".element");
elements.forEach((el) => {
  //  Scene특정한 요소를 감시하는 옵션
  // addTo scrollMagic에서 필요한 컨트롤러에 추가
  new ScrollMagic.Scene({
    triggerElement: el, // 보여지는지 여부를 감시할 요소를 지정한다.
    triggerHook: 0.8, // 0 ~ 1 사이의 어느 지점에서 트리거를 걸지 지정한다. 0은 뷰포트 최상단, 1은 뷰포트 최하단
  })
    .setClassToggle(el, "show") // 요소, 추가할 클래스명
    .addTo(new ScrollMagic.Controller()); // 내부 컨트롤러에 할당해서 동작하도록
});

html 특수 문자 - html entities

https://html.spec.whatwg.org/multipage/named-characters.html

© &copy; <  &lt;  > &gt;

 

img 요소가 width속성이 없이도 margin 값이 지정되는 경우는 display: block; css속성을 지정한 경우이다.

 

gsap & Scroll To 

gsap.min 기본적인 애니메이션은 포함하고 있음, 일부기능은 분리시켜둠

ScrollToPlugin이용하여 Scroll To 기능을 이용할 수 있다.

scrollTo를 이용할 to-top 버튼

 

ScrollTo를 이용하여 페이지 최상단으로 이동시키기

해당요소.addEventListener("click", () => {
  gsap.to(window, 0.7, {
    scrollTo: 0, // 스크롤(화면)의 위치를 0px 위치로 옮겨주겠다.
  });
});

해당요소를 클릭시 scrollTo를 이용하여 0.7초 동안 화면 최상단으로 이동한다.

Share Link
reply
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28