J'essaie de recréer cette animation dans React en utilisant HTML et CSS, en utilisant des styles en ligne et TypeScript. Je crée un objet avec des informations de style et je le référence dans l'attribut style. Ci-dessous le code. Cela ne fonctionne pas, je ne suis pas sûr de ce que je fais de mal, je soupçonne que les styles ne sont pas définis et référencés correctement ?
Voici l'exemple Codepen original que j'ai essayé de réécrire : Apple Animation
Voici mon code
import React from 'react'; const styles = { '@keyframes showTopText': { '0%': { transform: 'translate3d(0, 100%, 0)' }, '40%, 60%': { transform: 'translate3d(0, 50%, 0)' }, '100%': { transform: 'translate3d(0, 0, 0)' }, }, '@keyframes showBottomText': { '0%': { transform: 'translate3d(0, -100%, 0)' }, '100%': { transform: 'translate3d(0, 0, 0)' }, }, animatedTitle: { color: '#222', fontFamily: 'Roboto, Arial, sans-serif', height: '90vmin', left: '50%', top: '50%', transform: 'translate(-50%, -50%)', width: '90vmin', }, 'animatedTitle > div': { height: '50%', overflow: 'hidden', position: 'absolute', width: '100%', }, 'animatedTitle > div div': { fontSize: '12vmin', padding: '2vmin 0', position: 'absolute', }, 'animatedTitle > div div span': { display: 'block', }, 'animated-title > div.text-top': { borderBottom: '1vmin solid #000', top: 0, }, 'animatedTitle > div.text-top div': { animation: 'showTopText 1s', animationDelay: '0.5s', animationFillMode: 'forwards', bottom: 0, transform: 'translate(0, 100%)', }, 'animatedTitle > div.text-top div span:first-child': { color: '#767676', }, 'animatedTitle > div.text-bottom': { bottom: 0, }, 'animatedTitle > div.text-bottom div': { animation: 'showBottomText 0.5s', animationDelay: '1.75s', animationFillMode: 'forwards', top: 0, transform: 'translate(0, -100%)', }, }; function Design() { return ( <div style={styles.animatedTitle}> <div style={styles['animatedTitle > div.text-top div']}> <div> <span>mimicking</span> <span>apple's design</span> </div> </div> <div style={styles['animatedTitle > div.text-bottom']}> <div>for the win!</div> </div> </div> ); } export { Design };
Vous pouvez essayer d'utiliser
styled-components
来使您的组件更灵活和兼容。我使用styled-components
qui reproduit l'exemple codepen et facilite son extension.Par conséquent,
, qui devrait être le même nombre deTopAnimateBlock
etBottomAnimateBlock
ont tous deux l'attributTopAnimateBlock
和BottomAnimateBlock
都有 numOfLine 属性,表示块内有多少行。在BottomAnimateBlock
中的第二个属性是 delayTopLine,它应该与TopAnimateBlock
numOfLine, qui indique le nombre de lignes à l'intérieur du bloc. La deuxième propriété deBottomAnimateBlock
est delayTopLinenumOfLine
/TextStyle
dansTopAnimateBlock
car nous devons attendre que la rangée du haut soit jouée. De plus, vous pouvez facilement changer la couleur du texte via l'attribut color de et transmettre la valeur de couleur, HEX color ou rgba()hsla()
.TexteAnimation.tsx
TextStyle
TopAnimateBlock
中将 numOfLine 从2更改为3,在BottomAnimateBlock
composant Changement deTopAnimateBlock
etBottomAnimateBlock
🎜Et remplacez l'image clé par le clip suivant : 🎜 🎜