vue.js - Vue-Router 和 Gsap ScrollTrigger

标签 vue.js vue-router gsap scrolltrigger

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

我发现这个主题与 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>

最佳答案

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

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

伙计们,首先看看<transition>以上<router-view> .当您同时拥有上一页和下一页的组件并且 ScrollTrigger 计算当时的值 (offsetTop) 时,这就是问题

关于vue.js - Vue-Router 和 Gsap ScrollTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67004279/

相关文章:

javascript - Vuejs - 未捕获的类型错误 : Cannot redefine property: $router

vue.js - router-link 替换为 vue-router?

javascript - Nuxt auth getToken witnin async 未定义

javascript - 如何在 vue js html 中将到期时间显示为报价的计时器?

Angular 2/4 - 如何使用 Gsap 安装 ScrollMagic?

javascript - Jquery + GSAP 从 onComplete 函数访问本地计算的值

jquery - 我可以使用 PNG 作为此水动画的 mask 而不是 <text> 标签吗?

javascript - 获取缓存响应 - 无缓存 header 未按预期工作

vue.js - 找不到模块 'tailwindcss'

vue.js - 嵌套 v-for 中的增量计数器