Rumah  >  Soal Jawab  >  teks badan

Petua untuk justifyContent menggunakan interpolasi skrol framer-motion

<p>Saya mempunyai sekeping kod yang menghidupkan antara nilai x, tetapi ia tidak berfungsi apabila cuba beralih daripada justify-content: center to left. </p> <p>Berikut ialah coretan kod: </p> <pre class="brush:php;toolbar:false;">function Navbar() { const { scrollY } = useScroll(); const x = useTransform(scrollY, [0, 100], ["tengah", "kiri"]); kembali ( <motion.div susun atur className={styles.parent} style={{ justifyContent: x, paparan: "flex" peralihan={{ tempoh: 0.5 }} > <Imej src="/BlackLogo-2.svg" alt="Logo Cg" lebar={100} ketinggian={100} gaya={{padding: 20,}} keutamaan /> </motion.div> ) }</pre></p>
P粉238433862P粉238433862439 hari yang lalu431

membalas semua(1)saya akan balas

  • P粉293341969

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

    Saya jumpa penyelesaian. Anda hanya menggunakan fungsi useMotionValueEvent untuk menyemak sama ada skrol melepasi titik tertentu dan menetapkannya sebagai keadaan, kemudian anda perlu membungkus elemen anak anda (imej saya) dalam motion.div dan juga menetapkan kelas dalam div luar seperti di bawah Paparan :

    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>
      )
    
    }

    balas
    0
  • Batalbalas