Heim  >  Fragen und Antworten  >  Hauptteil

Tipps für justifyContent mithilfe der Scroll-Interpolation von Framer-Motion

<p>Ich habe einen Code, der zwischen x-Werten animiert, aber er funktioniert nicht, wenn ich versuche, von justify-content: center nach left zu wechseln. </p> <p>Das Folgende ist ein Codeausschnitt: </p> <pre class="brush:php;toolbar:false;">function Navbar() { const { scrollY } = useScroll(); const x = useTransform(scrollY, [0, 100], ["center", "left"]); zurückkehren ( <motion.div Layout className={styles.parent} style={{ justifyContent: x, display: "flex" }} Übergang={{ Dauer: 0,5 }} > <Bild src="/BlackLogo-2.svg" alt="Cg-Logo" width={100} Höhe={100} style={{padding: 20,}} Priorität /> </motion.div> ) }</pre></p>
P粉238433862P粉238433862387 Tage vor383

Antworte allen(1)Ich werde antworten

  • P粉293341969

    P粉2933419692023-09-01 09:20:19

    我找到了一个解决方案。你只需使用useMotionValueEvent函数来检查是否滚动超过某一点,并将其设置为状态,然后必须将你的子元素(我的图片)包装在motion.div中,同时在外部div中设置类,如下所示:

    function Navbar() {
      const { scrollY } = useScroll();
      const [Scrolled, setScrolled] = useState(false);
      
      useMotionValueEvent(scrollY, "change", (latest) => {
        if (latest > 200) {
          setScrolled(true);
        }
        else {
          setScrolled(false);
        }
      })
    
      return (
        <div 
          style={{justifyContent: Scrolled? "left" : "center"}}
          className={styles.icon}
        > 
          <motion.div
          layout
          transition={{type: "spring", stiffness: 700, damping: 30}}
          >
            <Image
              src="/BlackLogo-2.svg"
              alt="Cg Logo"
              width={100}
              height={100}
              style={{padding: 20,}}
              priority
            />
          </motion.div>
        </div>
      )
    
    }

    Antwort
    0
  • StornierenAntwort