0

I use Locomotive scroll with gsap scrollerProxy in Nuxt3 project. When change page from index to /tets locomotive scroll doesn't work. My tets page code:

<template>
  <div class="scroll" data-scroll-container>
    <div class="horizontal-sections">
      <div class="pin-wrap">
        <div class="animation-wrap to-right">
          <div class="section">
            <NuxtLink to="/">
                <p> Chnage page</p>
                <h2>Scroll Down</h2>
            </NuxtLink>
          </div>
          <div class="section section-amin section-gray">
            <h2>You need to animate on scroll. Performing some action.</h2>
            <div class="block-anim"></div>
          </div>
        </div>
      </div>
    </div>

    <div class="section section-lightblue">
      <h2>Some section 1</h2>
    </div>
    <div class="section">
      <h2>Some section 2</h2>
    </div>
  </div>
</template>

<script setup lang="ts">
import gsap from "gsap";
import ScrollTrigger from "gsap/ScrollTrigger";
import LocomotiveScroll from "locomotive-scroll";
gsap.registerPlugin(ScrollTrigger);
let locoScroll: any = ref();
onMounted(() => {
  locoScroll = new LocomotiveScroll({
    el: document.querySelector(".scroll") as HTMLElement,
    smooth: true,
  });
  locoScroll.on("scroll", ScrollTrigger.update);
  ScrollTrigger.scrollerProxy(".scroll", {
    scrollTop(value) {
      return arguments.length
        ? locoScroll.scrollTo(value, { duration: 0, disableLerp: true })
        : locoScroll.scroll.instance.scroll.y;
    }, 
  });
  new ResizeObserver(() => locoScroll.update()).observe(document.querySelector("[data-scroll-container]") as HTMLElement)
  const horizontalSections = gsap.utils.toArray(".horizontal-sections");
  horizontalSections.forEach((section: any, i) => {
    const thisPinWrap = section.querySelector(".pin-wrap");
    const thisAnimWrap = thisPinWrap.querySelector(".animation-wrap");
    const getToValue = () => -(thisAnimWrap.scrollWidth - window.innerWidth);
    ScrollTrigger.create({
      trigger: section,
      scroller: ".scroll",
      start: "top top",
      end: () => "+=" + thisAnimWrap.scrollWidth,
      pin: thisPinWrap,
    //   invalidateOnRefresh: true,
      scrub: true,
    });
    const fakeHorizontalAnim = gsap.fromTo(
      thisAnimWrap,
      {
        x: () => (thisAnimWrap.classList.contains("to-right") ? 0 : getToValue()),
      },
      {
        x: () => (thisAnimWrap.classList.contains("to-right") ? getToValue() : 0),
        ease: "none",
        scrollTrigger: {
          trigger: section,
          start: "top top",
          scroller: ".scroll",
          end: () => "+=" + (thisAnimWrap.scrollWidth - window.innerWidth),
          invalidateOnRefresh: true,
          scrub: true,
        },
      }
    );
    const tl = gsap.timeline();
    tl.to(".block-anim", {
      duration: 1,
      scroller: ".scroll",
      ease: "power3",
      clipPath: "inset(25% 25% 25.01% 25.01% round 25vw 25vw 25.01vw 25.01vw)",
    });
    ScrollTrigger.create({
      trigger: section,
      start: () => "top top-=" + (thisAnimWrap.scrollWidth - window.innerWidth),
      end: () => "+=" + window.innerWidth,
      animation: tl,
      scroller: ".scroll",
      scrub: true,
      markers: true,
    });
  });
});
</script>

<style lang="scss" scoped>
body {
  margin: 0;
  padding: 0;
  overflow-x: hidden;
}
h2 {
  position: relative;
  z-index: 2;
  margin: 0;
}
.section {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  width: 100vw;
  flex: 0 0 100vw;
  background: lightgray;
}
.section-gray {
  background: gray;
}
.section-lightblue {
  background: lightblue;
}
.block-anim {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: lightgoldenrodyellow;
}
.horizontal-sections {
  position: relative;
  overflow-x: hidden;
  .pin-wrap,
  .animation-wrap {
    display: flex;
    position: relative;
    z-index: 1;
    height: 100vh;
  }
}
.spacer {
  height: 50vh;
  width: 100vw;
}
</style>

Please ten my about how to fix this bug.

My repo: https://github.com/cyprianwaclaw/Skandynawia-Przystan My page url: https://skandynawia-przystan.vercel.app/

0 Answers0