首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一个反应组件中使用多个“useInView”钩子?

如何在同一个反应组件中使用多个“useInView”钩子?
EN

Stack Overflow用户
提问于 2020-10-12 15:30:23
回答 2查看 7K关注 0票数 1

我正在致力于一个反应项目,并试图动画和显示div一旦他们在视图中。我正在使用useInView钩子从‘反应-交叉-观察者’来确定div是否在视图中,然后启动动画以使div可见。

但是,当我在同一个组件中有两个div时,即第一个div在视图中--动画并显示第一个div,以及当第二个div在视图中进一步滚动时--动画并显示第二个div时,这是不太好的。

任何帮助都将不胜感激。

下面是代码:

代码语言:javascript
复制
import { motion } from 'framer-motion';
import { useInView } from 'react-intersection-observer';

function Container(props) {

    const { ref, inView } = useInView({
        threshold: 1
    });

    const { ref1, inView1 } = useInView({
        threshold: 1
    });

    return (
        <div>
            <motion.div ref={ref}>
                <motion.h1 
                   initial={{  x: -700, opacity: 0 }} 
                   animate={ inView ? { x: 0,  opacity: 1 } : ''} 
                   transition={{ duration: .75 }} >
                     Sample Title 1
                </motion.h1>
                <motion.p 
                   initial={{  x: 400, opacity: 0 }} 
                   animate={ inView ? { x: 0,  opacity: 1 } : ''} 
                   transition={{ delay: 0.8, duration: 1, ease: "easeOut" }} >
                     Sample Description 1
                </motion.p>
            </motion.div>

            <motion.div ref={ref1}>
                <motion.h1 
                   initial={{ opacity: 0 }} 
                   animate={ inView1 ? { opacity: 1 } : ''} 
                   transition={{ duration: .75 }} >
                     Sample Title 2
                </motion.h1>
                <motion.p
                   initial={{  x: 400, opacity: 0 }} 
                   animate={ inView1 ? { x: 0,  opacity: 1 } : ''} 
                   transition={{ delay: 0.8, duration: 1, ease: "easeOut" }} >
                     Sample Description 2
                </motion.p>
            </motion.div>         
        </div>
    );
}

export default Container;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 15:48:02

我想你应该把动画和交集事件正确地连接起来。

https://www.framer.com/api/motion/utilities/#animate

  • InVew
  1. 动画控制:从“反应-交集-观察者”到

代码语言:javascript
复制
const from = useMotionValue(0);

useEffect(
  () => {
    if (inView) {
      const controls = animate(x, 100, {
        type: "spring",
        stiffness: 2000,
      })

      return controls.stop
    }
  },
  [inView]
}
票数 0
EN

Stack Overflow用户

发布于 2021-07-02 10:06:17

在他们的文档中,它说您可以使用多个变量进行数组析构,而不能使用在您自己的情况下使用的对象析构。

所以你应该这么做。

代码语言:javascript
复制
const [ref, inView ] = useInView()
const [ref2, inView2 ] = useInView()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64320816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档