Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
¿Cómo lograría este efecto de cambio de color de fondo de desplazamiento?

Básicamente, supongamos que tengo 10 secciones. Cada uno tiene asignado un color diferente para el color de fondo.

Cuando el usuario se desplaza hacia abajo desde las secciones 1 a 10, me gustaría que el color de fondo de la etiqueta cambie según la sección que esté en la pantalla.

Suponiendo que la altura de la ventana gráfica es de 1000 px, me gustaría que la función averiguara qué sección se encuentra actualmente en 800 px de 1000 px, por lo que el 20 % inferior, luego busque el color de fondo de esa sección en el 20 % inferior y aplíquelo a la etiqueta hasta que el usuario se desplace a la siguiente sección o se desplace hacia arriba y otro componente tome el color de fondo.

He intentado usar IntersectionObservor para esto, pero no creo que sea el mejor enfoque para lo que quiero.

Actualmente, mi configuración es, estoy renderizando varios componentes uno tras otro, cada uno de ellos tiene un atributo de datos de "fondo de datos = {fondo}"

Luego, el observador recorre, los agrega todos al observador y observa para encontrar cuál está en la pantalla, pero no funciona completamente para lo que necesito.

¿Hay una manera más fácil de lograr lo que estoy buscando?

Aquí está el código que tengo hasta ahora

 import Page from "../components/common/Page"; import Hero from "../components/molecules/Hero"; import TechStack from "@/components/organisms/TechStack"; import { useEffect } from "react"; const Home = () => { useEffect(() => { const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { console.log("entry", entry); if (entry.isIntersecting) { document.body.style.backgroundColor = entry.target.dataset.background; } }); }, { threshold: [0.20] } ); // create an array of all the components to be watched const components = [...document.querySelectorAll("[data-background]")]; components.forEach((component) => { observer.observe(component); }); }, []); return ( <Page seo={{ title: "Starter Kit" }}> <Hero /> <TechStack background="white"/> <TechStack background="grey" /> <TechStack background="blue"/> <TechStack background="green"/> <TechStack background="grey"/> <TechStack background="white"/> </Page> ); }; export default Home;
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede agregar dinámicamente el elemento al observador cuando se montó, así

 <div ref={(r) => r && observer.observe(r)} />

Aquí está el ejemplo: https://codesandbox.io/s/sleepy-margulis-1f7hz7

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!