🥰Sử dụng onEnterBack, Label end: "+=" + (images.length - 1) * 100 + "%" FULL Phần 2 (ok)

Example 1: Sử dụng Absolute Cards

— Hiện tại với cấu hình này chưa có gì sảy ra vẫn như bình thường các khối Card 1, Card 2, Cart 3 đang bị ẩn dưới wrapper

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>CodePen - Loop Absolute Cards</title>
  <link rel='stylesheet' href='https://codepen.io/GreenSock/pen/xxmzBrw.css'>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    .panel,
    .wrapper {
      position: relative;
      width: 100%;
      min-height: unset;
      height: 500px;
    }
    .card {
      position: absolute;
      left: 50%;
      bottom: 0;
      visibility: hidden;
      font-size: 30px;
      width: 100vw;
      text-align: center;
    }
    .card:nth-child(1) {
      background-color: red;
    }
    .card:nth-child(2) {
      background-color: blueviolet;
    }
    .card:nth-child(3) {
      background-color: cadetblue;
    }
    .card p {
      margin: 0;
    }
  </style>
</head>
<body>
  <!-- partial:index.partial.html -->
  <main>
    <div class="panel gradient-green"></div>
    <div class="wrapper">
      <div class="card">
        <p>Card 1</p>
      </div>
      <div class="card">
        <p>Card 2</p>
      </div>
      <div class="card">
        <p>Card 3</p>
      </div>
    </div>
    <div class="panel gradient-blue"></div>
  </main>
  <!-- partial -->
  <script src='https://unpkg.com/gsap@3/dist/gsap.min.js'></script>
  <script src='https://unpkg.com/gsap@3/dist/ScrollTrigger.min.js'></script>
  <script>
    console.clear();
    gsap.registerPlugin(ScrollTrigger);
    const cards = gsap.utils.toArray(".card");
    gsap.set(cards, {
      xPercent: -50,
      yPercent: 100,
      autoAlpha: 1
    });
    const tl = gsap.timeline({
      defaults: {
        duration: 1,
        ease: "power1.inOut"
      },
      scrollTrigger: {
        trigger: ".wrapper",
        start: "top top",
        end: "+=100%",
        pin: "main",
        scrub: true,
        markers: true
      }
    });
  </script>
</body>
</html>

Chú ý 1: Nếu sử dụng pin: true thì nó sẽ pin lên .wrapper

Chú ý 2: Nếu không sử dụng scrub: true thì các card chạy một mạch hết luôn (dường như để nó kích hoạt các hiệu ứng timeline được định nghĩa theo một cách tuần tự)

— Sử dụng cấu hình sau tất cả các card đều hiệu ứng như nhau không có khác biệt gì. (do đó ở trường hợp sau chúng ta sẽ tìm cách chỉ áp dụng lần lượt cho từng phần tử)

— Với cấu hình sau thì chỉ áp dụng cho một phần tử duy nhất

Toàn bộ code ở đây

Example 2: Xếp trồng layout 👌

Việc sử dụng hết sức đơn giản chỉ cần sử dụng

Example 3: Xếp trồng layout dạn Accordion

Chú ý

Toàn bộ code

— Chú ý 1: Nếu có class pin-spacer thì khi scroll chưa vượt ra khỏi khung Scroller Start và Scroller End thì nội dung trong pin-spacer không dịch chuyển, trong trường hợp này pin: true do đó .column-wrapper không di chuyển trong khung

— Chú ý 2: Nếu sử dụng pin: ".column.right" khi đó .column.right không di chuyển khi chưa vượt qua khung nhìn, còn .column.left vẫn di chuyển theo mặc định

Chú ý 3: Khi scroll lên trên scroller startscroller end thì sẽ là onEnter, ngược lại sẽ là onEnterBack

Last updated

Was this helpful?