Landing page GSAP & Elementor ep. 5

SHARE

SIGN UP FOR THE NEWSLETTER

Your subscription could not be saved. Please try again.
Your subscription has been successful.

VIDEO 5

Code:

JavaScript

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.1/gsap.min.js"></script>
<script <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.13.0/SplitText.min.js"></script>


<script>
gsap.registerPlugin(SplitText);

document.addEventListener("DOMContentLoaded", () => {
  const profileImagesContainer = document.querySelector(".profile-images");
  const profileImages = document.querySelectorAll(".profile-images .img-team");
  const nameElements = document.querySelectorAll(".profile-names .name");
  const nameHeadings = document.querySelectorAll(".profile-names .name h2");

  nameHeadings.forEach((heading) => {
    const split = new SplitText(heading, { type: "chars" });
    split.chars.forEach((char) => {
      char.classList.add("letter");
    });
  });

  const defaultLetters = nameElements[0].querySelectorAll(".letter");
  gsap.set(defaultLetters, { y: "100%" });

  if (window.innerWidth >= 900) {
    profileImages.forEach((img, index) => {
      const correspondingName = nameElements[index + 1];
      const letters = correspondingName.querySelectorAll(".letter");

      img.addEventListener("mouseenter", () => {
        gsap.to(img, {
          width: 140,
          height: 140,
          duration: 0.5,
          ease: "power4.out",
        });

        gsap.to(letters, {
          y: "-100%",
          ease: "power4.out",
          duration: 0.75,
          stagger: {
            each: 0.025,
            from: "center",
          },
        });
      });

      img.addEventListener("mouseleave", () => {
        gsap.to(img, {
          width: 100,
          height: 100,
          duration: 0.5,
          ease: "power4.out",
        });

        gsap.to(letters, {
          y: "0%",
          ease: "power4.out",
          duration: 0.75,
          stagger: {
            each: 0.025,
            from: "center",
          },
        });
      });
    });

    profileImagesContainer.addEventListener("mouseenter", () => {
      gsap.to(defaultLetters, {
        y: "0%",
        ease: "power4.out",
        duration: 0.75,
        stagger: {
          each: 0.025,
          from: "center",
        },
      });
    });

    profileImagesContainer.addEventListener("mouseleave", () => {
      gsap.to(defaultLetters, {
        y: "100%",
        ease: "power4.out",
        duration: 0.75,
        stagger: {
          each: 0.025,
          from: "center",
        },
      });
    });
  }
});

</script>

CSS

.team {
  gap: 2.5em;
  overflow: hidden;
}

.profile-images {
  width: max-content;
}

.img-team {
  width: 100px;
  height: 100px;
  padding: 5px;
  cursor: pointer;
  will-change: width, height;
}

.profile-names {
  width: 100%;
  height: 13rem;
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
  overflow: hidden;
}

.profile-names .name {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
}

.name h2 {
  position: absolute;
  width: 100%;
  text-align: center;
  text-transform: uppercase;
  font-size: 15rem;
  user-select: none;
  transform: translateY(100%);
}

.name.default h2 {
  transform: translateY(-100%);
}

.name h2 .letter {
  position: relative;
  transform: translateY(0%);
  will-change: transform;
}



Watch on YouTube:

https://youtu.be/vFwDRK0eUqg

SIGN UP FOR THE NEWSLETTER

Your subscription could not be saved. Please try again.
Your subscription has been successful.