es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna manera de no aplicar animaciones de resorte a los objetos hijos?

¿Existe alguna manera de tener, por ejemplo, un div que se desvanezca y aparezca (para usarlo para alternar entre diferentes fondos, digamos) y que sus hijos (texto, digamos) siempre estén a plena opacidad?

{transitions((style,
<animated.div
class={
bg[i] + " bg-fixed bg-cover absolute h-full w-screen bg-no-repeat"
}
style={{
...style,
}}
>
<ComponenteTextoAquí/>
</animated.div>
))}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible tener un div que se desvanece mientras mantiene a sus hijos con opacidad completa todo el tiempo. Una forma de lograr esto es utilizando la biblioteca react-spring para animar la opacidad del div. Puede establecer la opacidad de los hijos en 1 usando CSS, mientras anima la opacidad del div padre utilizando react-spring. Aquí tienes un ejemplo:

    import { useTransition, animated } from 'react-spring'
    
    const content = [
      { id: 1, text: 'Fondo 1', imgUrl: 'url/to/image1' },
      { id: 2, text: 'Fondo 2', imgUrl: 'url/to/image2' },
      { id: 3, text: 'Fondo 3', imgUrl: 'url/to/image3' }
    ]
    
    const MiComponente = () => {
      const [index, setIndex] = useState(0)
      const transitions = useTransition(content[index], item => item.id, {
        from: { opacity: 0 },
        enter: { opacity: 1 },
        leave: { opacity: 0 }
      })
    
      const handleClick = () => {
        setIndex(index => (index + 1) % content.length)
      }
    
      return (
        <div classname="relative h-full w-screen">
          {transitions.map(({ item, props, key }) => (
            <animated.div key="{key}" classname="absolute h-full w-screen bg-fixed bg-cover bg-no-repeat" style="{{" ...props,="" backgroundimage:="" `url(${item.imgurl})`="" }}="">
              <div classname="absolute inset-0 flex items-center justify-center">
                <h1 classname="text-white text-xl font-bold opacity-100">{item.text}</h1>
              </div>
            </animated.div>
          ))}
          <button classname="absolute bottom-0 right-0" onclick="{handleClick}">Siguiente</button>
        </div>
      )
    }
    
    export default MiComponente;
    

    En este ejemplo, tenemos un array de tres objetos que representan el contenido que queremos mostrar (imagen de fondo y texto). Utilizamos el hook useTransition de react-spring para animar la opacidad de los divs a medida que cambiamos entre los elementos del array. Los hijos del div (el texto) tienen una opacidad completa usando CSS (opacity-100).

    Utilizamos la propiedad style del componente animated.div para pasar los estilos de la animación. Establecemos la propiedad backgroundImage a la URL de la imagen de fondo actual y utilizamos las props provenientes de useTransition para animar la opacidad del div.

    Finalmente, tenemos un botón para cambiar al siguiente elemento en el array. Cuando se hace clic en el botón, actualizamos el estado index para apuntar al siguiente elemento del array, utilizando el operador modulo para volver al inicio cuando llegamos al final.

Comments are closed.