Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

201
Vistas
javascript: cómo comenzar a actualizar el porcentaje de desplazamiento cuando el elemento está en la parte superior de la ventana gráfica

Al ingresar al sitio web, esta es la primera interfaz de usuario que verá. ingrese la descripción de la imagen aquí

Luego, si se desplaza hacia abajo hasta el principio de la sección B
Espero que la sección B se vuelva pegajosa y que el estado de currentPercentage comience a aumentar desde el 0 % gradualmente si se desplaza.
ingrese la descripción de la imagen aquí

Cuando el estado de currentPercentage alcance el 100 %, el efecto adhesivo ya no se aplicará a la sección B, luego podrá desplazarse hacia abajo hasta la sección C o la parte inferior de la página.

ingrese la descripción de la imagen aquí

Es algo así como la página de inicio de circle-ci

Puede intentar desplazarse en esta sección.
ingrese la descripción de la imagen aquí

Creo que hay algunas cosas que debemos resolver para la solución.

  1. Cómo hacer que la sección B se vuelva pegajosa cuando llega la posición de desplazamiento a la sección B
  2. Cómo hacer scroll y aumentar el porcentaje al llegar a la sección B

He intentado pensar tanto en css como en javascript, todavía no puedo encontrar la solución

También he investigado mucho este problema durante unos días, pero aún no lo he resuelto.
Creo que a muchos desarrolladores les gustaría saber cómo hacer este tipo de efecto en su interfaz, y será beneficioso para otros desarrolladores tener una solución más rápida para lidiar con este tipo de UX en el futuro, ya que por lo que he Noté que nadie ha mencionado este tipo de manejo de UX.

Agradecería si alguien puede responder esta pregunta con un ejemplo, como referencia para otros desarrolladores.

Aplicación.js

 import "./styles.css"; import "bootstrap/dist/css/bootstrap.min.css"; import ProgressBar from "react-bootstrap/ProgressBar"; import { useState } from "react"; export default function App() { const [currentProgress, setCurrentProgress] = useState(100); return ( <div className="App"> <div className="sectionA">Section A</div> <div className="sectionB"> Section B <ProgressBar now={currentProgress} label={`${currentProgress}%`} style={{ marginBottom: "16px" }} /> </div> <div className="sectionC">Section C</div> </div> ); }

codigosandbox
https://codesandbox.io/s/mutable-fire-sz19b?file=/src/App.js:0-619

Actualización 1
Actualicé el código y puedo hacer que el contenedor B sea pegajoso, pero no sé cómo continuar con la experiencia de usuario.

Aplicación.js

 import "./styles.css"; import "bootstrap/dist/css/bootstrap.min.css"; import ProgressBar from "react-bootstrap/ProgressBar"; import { useState } from "react"; export default function App() { const [currentProgress, setCurrentProgress] = useState(3); return ( <div className="App"> <div className="sectionA">Section A</div> <div style={{ position: "sticky", top: 0 }}> <div className="sectionB"> Section B <ProgressBar now={currentProgress} label={`${currentProgress}%`} style={{ marginBottom: "16px" }} /> </div> <div className="sectionC">Section C</div> </div> <div style={{ minHeight: "400vh", maxHeight: "calc(200vh - 466px)" }} /> </div> ); }

codigosandbox
https://codesandbox.io/s/elated-hawking-n3rvw?file=/src/App.js:0-778

Actualización 2

Se agregó la biblioteca react-scroll-percentage para desplazarse para actualizar currentProgress

Sin embargo, cuando todo el contenedor B se exponga en la ventana gráfica, el currentProgress comenzará a actualizarse, que no es lo que quiero
ingrese la descripción de la imagen aquí 

Lo que quiero es que cuando la Sección B llegue a la parte superior de la ventana gráfica, el desplazamiento hará que el usuario se sienta pegajoso y luego currentProgress comenzará a actualizarse desde el 0 %.

Aplicación.js

 import "./styles.css"; import "bootstrap/dist/css/bootstrap.min.css"; import React, { useState, useEffect } from "react"; import { useScrollPercentage } from "react-scroll-percentage"; import ProgressBar from "react-bootstrap/ProgressBar"; export default function App() { const [currentProgress, setCurrentProgress] = useState(0); const [ref, percentage] = useScrollPercentage({ threshold: 1.0 }); useEffect(() => { setCurrentProgress(percentage * 100); }, [percentage]); return ( <div className="App"> <div className="sectionA">Section A</div> <div style={{ position: "sticky", top: 0 }}> <div className="sectionB" ref={ref}> Section B <ProgressBar now={currentProgress} label={`(${currentProgress})%`} style={{ marginBottom: "16px" }} /> </div> <div className="sectionC">Section C</div> </div> <div style={{ minHeight: "400vh", maxHeight: "calc(200vh - 466px)" }} /> </div> ); }

codigosandbox
https://codesandbox.io/s/elated-hawking-n3rvw?file=/src/App.js:0-1029

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe escuchar los eventos de scroll , verificar scrollTop del elemento de desplazamiento y decidir cuál debe ser el css y el currentProgress . Esto es más fácil cuando la altura de cada sección es conocida y constante. El elemento exterior también necesita una gran altura predeterminada, para dejar espacio para el desplazamiento.

El código podría ser simplemente

 if (scrollTop > heightofSectionA) { //set sectionB css to {position: fixed, top: 0, ...} currentProgress = (scrollTop-heightofSectionA)/lengthofSectionB*100 } else { //set sectionB css to {position: static} currentProgress = 0 }

Hay varias formas en que html y css podrían verse. Con position: sticky , es posible que no necesite cambiar CSS en absoluto. Pero siempre que sepa cómo debería verse el css en cualquier etapa del desplazamiento, no debería tener problemas para cambiar entre ellos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda