【问题标题】:GSAP Animations not loading in productionGSAP 动画未在生产中加载
【发布时间】:2019-12-18 16:40:12
【问题描述】:

我正在与 Gatsby 和 GSAP 一起为动画制作个人作品集。它在开发中有效,但在生产中无效。我已经检查并阅读了大多数解决方案,但似乎不起作用,而且它们都很旧。我也在使用 React Hooks。

import React, { useEffect, useRef } from "react"
import { TweenMax, Power3, TimelineLite } from "gsap"
import Img from "gatsby-image"

const Projects = ({ title, text, img, link, linkText }) => {
  let app = useRef(null)
  let image = useRef(null)
  let contents = useRef(null)

  let tl = new TimelineLite({ delay: 0.8 })

  useEffect(() => {
    //For Header
    TweenMax.to(app, 0, {
      css: { visibility: "visible" },
    })

    //Image
    tl.from(image, 1.2, { y: 20, ease: Power3.easeOut }, "Start").from(
      image.firstElementChild,
      2,
      {
        scale: 1.6,
        ease: Power3.easeOut,
      },
      0.2
    )

    //Contents Animation
    const headlineFirst = contents.children[0]
    const headlineSecond = headlineFirst.nextSibling
    const headlineThird = headlineSecond.nextSibling

    tl.staggerFrom(
      [headlineFirst, headlineSecond, headlineThird],
      1,
      {
        y: 50,
        opacity: 0,
        ease: Power3.easeOut,
        delay: 0.8,
      },
      0.15,
      "Start"
    )
  }, [tl])

  return (
    <div
      ref={el => (app = el)}
      className="flex flex-wrap my-16 lg:my-20 px-4 lg:px-0"
    >
      <div className="w-full lg:w-3/5">
        <div ref={el => (image = el)} className="image-hover">
          <Img fluid={img} />
        </div>
      </div>

      <div className="w-full lg:w-2/5 lg:pl-10 mt-4 lg:mt-0">
        <div className="h-full flex justify-center items-center">
          <div ref={el => (contents = el)}>
            <h3 className="text-3xl">{title}</h3>
            <p className="text-lg">{text}</p>
            <a className="project-link text-base lg:text-lg" href={link}>
              Visit {linkText}
            </a>
          </div>
        </div>
      </div>
    </div>
  )
}

export default Projects

我希望有人可以帮助我,今天必须上线。提前谢谢你。

【问题讨论】:

    标签: reactjs gatsby gsap


    【解决方案1】:

    找到了解决办法。在这种情况下,任何人都有同样的问题。这是解决方案,它对我有用。

    import React, { useEffect, useRef, useState } from "react"
    import gsap from "gsap"
    import Img from "gatsby-image"
    
    const Projects = ({ title, text, img, link, linkText }) => {
      let app = useRef(null)
      let image = useRef(null)
      let contents = useRef(null)
    
      const [tl] = useState(gsap.timeline({ delay: 0.8 }))
    
      useEffect(() => {
        //For Header
        tl.to(app, 0, {
          css: { visibility: "visible" },
        })
    
        //Image
        tl.from(image, 1.2, { y: 20, ease: "power3.easeOut" }, "Start").from(
          image.firstElementChild,
          2,
          {
            scale: 1.6,
            ease: "power3.easeOut",
          },
          0.2
        )
    
        //Contents Animation
        const headlineFirst = contents.children[0]
        const headlineSecond = headlineFirst.nextSibling
        const headlineThird = headlineSecond.nextSibling
    
        tl.staggerFrom(
          [headlineFirst, headlineSecond, headlineThird],
          1,
          {
            y: 50,
            opacity: 0,
            ease: Power3.easeOut,
            delay: 0.8,
          },
          0.15,
          "Start"
        )
      }, [tl])
    
      return (
        <div
          ref={el => (app = el)}
          className="flex flex-wrap my-16 lg:my-20 px-4 lg:px-0"
        >
          <div className="w-full lg:w-3/5">
            <div ref={el => (image = el)} className="image-hover">
              <Img fluid={img} />
            </div>
          </div>
    
          <div className="w-full lg:w-2/5 lg:pl-10 mt-4 lg:mt-0">
            <div className="h-full flex justify-center items-center">
              <div ref={el => (contents = el)}>
                <h3 className="text-3xl">{title}</h3>
                <p className="text-lg">{text}</p>
                <a className="project-link text-base lg:text-lg" href={link}>
                  Visit {linkText}
                </a>
              </div>
            </div>
          </div>
        </div>
      )
    }
    
    export default Projects
    

    我发现 gsap 3 发生了很大变化。所以我从 gsap 导入 gsap 并用 useState 调用它,它在生产中工作

    【讨论】:

    • 在 GSAP 3 中,每个补间都包含交错,因此您应该使用带有 stagger 参数的常规 .from() 补间。持续时间参数也已贬值,而是将其包含在 vars 参数中。您也不需要包含 css: {},因为 GSAP 可以识别 DOM 元素并自动为您应用 CSS 属性。有关更多信息,请参阅"Top 5 Features of GSAP 3" 文章。
    • 您的“power3.easeOut”轻松也无效。它应该是“power3.out”——使用the ease helper 来获得正确的格式。另请注意,out 是默认值,因此“power3”也相同。
    【解决方案2】:

    您只需在导入它们后register 尝试使用的全局变量,这样您的构建过程就不会摇晃它们:

    gsap.registerPlugin(TweenMax, Power3, TimelineLite);
    

    GreenSock 建议您使用Install Helper

    【讨论】:

    • 它是 GSAP 3 的新内容。我们建议您只使用改进和缩短的 GSAP 3 格式,而不是旧的 GSAP 2 格式。
    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多