【问题标题】:Vue-Router and Gsap ScrollTriggerVue-Router 和 Gsap ScrollTrigger
【发布时间】:2021-07-04 08:10:31
【问题描述】:

vue-router 和 gsap 的 scrolltrigger 插件有一些问题。 我有一些使用 scrolltrigger 的 vue 组件,当我转到另一个页面并返回具有滚动触发器效果的页面时,它不会触发,但如果我手动刷新页面则可以工作。

我发现这个话题的人对 NuxtJs 有同样的问题,但是 ScrollTrigger.disable() 和 ScrollTrigger.kill() 解决方案对我不起作用: https://greensock.com/forums/topic/24886-in-nuxt-when-using-scrolltriggerkill-how-can-it-run-again-when-page-is-viewed/

这是我用 ScrollTrigger 制作的一个组件:

模板部分

<template>
<section class="marquee">
    <div class="marquee__inner" aria-hidden="true" ref="inner">
      <div class="marquee__part">food wine fish beef vegetables</div>
          <div class="marquee__part">food wine fish beef vegetables</div>
          <div class="marquee__part">food wine fish beef vegetables</div>
          <div class="marquee__part">food wine fish beef vegetables</div>
          <div class="marquee__part">food wine fish beef vegetables</div>
    </div>
</section>
</template>

脚本部分

<script>
import gsap from "gsap"
import ScrollTrigger from 'gsap/ScrollTrigger'
gsap.registerPlugin(ScrollTrigger)

export default {
  name: 'ServicesMarquee',
  data() {
    return {
      currentScroll: 0,
      isScrollingDown: true,
      test: null,
    }
  },
  methods: {
    scrollAnim() {
      gsap.to(this.$refs.inner, {
        xPercent: -65,
        scrollTrigger: {
          trigger: ".marquee",
          start: "top bottom",
          end: "top top",
          scrub: 0,
        }
      })
    },
  },
  mounted() {
    gsap.set(this.$refs.inner, {xPercent: -50});
    let tween = gsap.to(this.$refs.inner.querySelectorAll('.marquee__part'), {xPercent: -100, repeat: -1, duration: 10, ease: "linear"}).totalProgress(0.5);
    let self = this

    window.addEventListener("scroll", function(){
      if ( window.pageYOffset > self.currentScroll ) {
        self.isScrollingDown = true;
      } else {
        self.isScrollingDown = false;
      }
        
      gsap.to(tween, {
        timeScale: self.isScrollingDown ? 1 : -1
      });
      self.currentScroll = window.pageYOffset
    });
    
    gsap.to(this.$refs.inner, {xPercent: -65 });
    this.scrollAnim()
  }
}
</script>

【问题讨论】:

    标签: vue.js vue-router gsap scrolltrigger


    【解决方案1】:

    我在 Stackoverflow 和 GSAP 论坛上阅读了有关此问题和类似问题的所有文章,YES setTimeout 工作正常,但这不是答案。

    我也很困惑,这个问题并没有影响到很多人,但他们描述的情况几乎相同,当您浏览页面(路由)并返回上一个时 vue + router + gsap + scrolltrigger 停止工作一个有动画的(动画在这种情况下不起作用)。

    所以伙计们,首先看看上面的&lt;transition&gt; &lt;router-view&gt;。当您同时拥有上一页和下一页的组件时,就会出现此问题,而 ScrollTrigger 会计算当时的值 (offsetTop)

    【讨论】:

    • 嘿,您找到解决此问题的任何方法了吗?我有同样的问题,如果我在页面之间导航,ScrollTrigger 会表现得很奇怪,并导致一些元素动画无法启动。有时它甚至会抛出错误Cannot read properties of undefined (reading 'pin')
    • 你在 上有 吗?
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2022-11-13
    • 2021-03-17
    • 2021-02-16
    • 2021-04-23
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多