0

我一直在尝试使用gatsby-plugin-scroll-revealwhich 使用 Sal.js 来为我网站上的英雄部分设置动画。我正在努力使英雄中的文本在您向下滚动页面时淡入然后淡出。现在,我只能让它淡入。我怎样才能用 Sal.js 或其他方式实现它?

我还尝试了一种不同的方法,创建了一个使用 IntersectionObserver DOM API 的组件,但我无法让它真正发挥作用。

这是组件:

import React from 'react';
import ReactDOM from 'react-dom';

function FadeInSection(props) {
  const [isVisible, setVisible] = React.useState(true);
  const domRef = React.useRef();
  React.useEffect(() => {
    const observer = new IntersectionObserver(entries => {
      entries.forEach(entry => setVisible(entry.isIntersecting));
    });
    observer.observe(domRef.current);
    return () => observer.unobserve(domRef.current);
  }, []);
  return (
    <div
      className={`fade-in-section ${isVisible ? 'is-visible' : ''}`}
      ref={domRef}
    >
      {props.children}
    </div>
  );
}

export default FadeInSection
4

1 回答 1

2

我从这篇文章中找到了一个解决方案: https ://markoskon.com/scroll-reveal-animations-with-react-spring/

因此,我使用 react-spring 在滚动和 react-visibility-sensor 上创建显示动画,以查看我想要的动画元素是否可见。

// App.js

import React from "react";
import { Spring } from "react-spring/renderprops";
import VisibilitySensor from "react-visibility-sensor";

<VisibilitySensor once>
   {({ isVisible }) => (
     <Spring delay={100} to={{ opacity: isVisible ? 1 : 0 }}>
       {({ opacity }) => <h1 style={{opacity}}>Title</h1>}
     </Spring>
    )}
</VisibilitySensor>
于 2020-04-03T18:32:33.050 回答