Je veux avoir une page Web qui a un mot centré.
Je veux que ce mot soit dessiné avec une animation, de telle sorte que la page "écrit" le mot de la même manière que nous le ferions, c'est-à-dire qu'il commence à un point et dessine des lignes et des courbes dans le temps de sorte que le résultat final soit un glyphe.
Je ne me soucie pas si cela est fait avec <canvas>
ou le DOM, et je me fiche que ce soit fait avec JavaScript ou CSS. L'absence de jQuery serait bien, mais pas obligatoire.
Comment puis-je faire ceci? J'ai cherché exhaustivement sans chance.
javascript
css
canvas
html5-canvas
css-shapes
strugee
la source
la source
Réponses:
Version toile
Cela va dessiner des caractères uniques plus comme on écrirait à la main. Il utilise un long tableau de bord où l'ordre d'activation / désactivation est permuté dans le temps par caractère. Il a également un paramètre de vitesse.
Exemple d'animation (voir démo ci-dessous)
Pour augmenter le réalisme et la sensation organique, j'ai ajouté un espacement aléatoire des lettres, un décalage y delta, de la transparence, une rotation très subtile et enfin une police déjà "manuscrite". Celles-ci peuvent être regroupées sous forme de paramètres dynamiques pour fournir une large gamme de "styles d'écriture".
Pour un aspect encore plus réaliste, les données de chemin seraient nécessaires, ce qui n'est pas le cas par défaut. Mais il s'agit d'un morceau de code court et efficace qui se rapproche du comportement manuscrit et facile à implémenter.
Comment ça fonctionne
En définissant un motif de tiret, nous pouvons créer des fourmis en marche, des lignes pointillées, etc. Profitant de cela en définissant un point très long pour le point "off" et en augmentant progressivement le point "on", cela donnera l'illusion de dessiner la ligne quand elle sera caressée tout en animant la longueur du point.
Étant donné que le point désactivé est si long, le motif répétitif ne sera pas visible (la longueur variera en fonction de la taille et des caractéristiques de la police de caractères utilisée). Le chemin de la lettre aura une longueur, nous devons donc nous assurer que chaque point couvre au moins cette longueur.
Pour les lettres qui se composent de plus d'un chemin (par exemple O, R, P, etc.) comme pour le contour, pour la partie creuse, les lignes semblent tracées simultanément. Nous ne pouvons pas faire grand-chose avec cette technique car elle nécessiterait que l'accès à chaque segment de chemin soit tracé séparément.
Compatibilité
Pour les navigateurs qui ne prennent pas en charge l'élément canvas, une autre façon d'afficher le texte peut être placée entre les balises, par exemple un texte stylisé:
Démo
Cela produit le passage en direct animé ( pas de dépendances ) -
la source
Modifier 2019
J'ai créé une bibliothèque javascript qui peut créer des animations réalistes. Il est facile à utiliser et nécessite un fichier JSON spécial qui fait office de police.
Consultez la page Github pour la documentation et des exemples. Et Codepen
Réponse précédente
L'exemple ci-dessous utilise snap.js pour créer dynamiquement des
tspan
éléments, puis animer chacun d'euxstroke-dashoffset
.Afficher l'extrait de code
Réponse précédente
Vous pouvez faire quelque chose comme ça en utilisant les svg
stroke-dasharray
Afficher l'extrait de code
Sans
keyframes
animation, vous pouvez faire quelque chose comme çaAfficher l'extrait de code
Et pour le support IE, vous pouvez utiliser jquery / javascript
Afficher l'extrait de code
la source
$(this).css('fill', 'red')
comme rappel à l'animationUniquement CSS:
la source
Après de nombreux tests, voici quelques notes. Le but est d'afficher des données texte rapides de la manière la moins bloquante, sur des pages lourdes DOM nécessitant des interactions utilisateurs.
Il y a bien sûr plusieurs façons de réaliser la même chose. Sur cet exemple, les différences peuvent ne pas être évidentes, elles s'appliquent vraiment aux interfaces complexes.
Style le plus lent :
innerHTML
et en ligne. Le DOM est recalculé à chaque itération. Le navigateur travaille dur pour garder le train. Il échouera rapidement, provoquant des fuites et gels de mémoire:Bien mieux : l' utilisation
textContent
,requestAnimationFrame
et l'animation Web api. Cela va beaucoup plus facilement, c'est évident sur les pages lourdes DOM. Les interactions utilisateur ne bloqueront pas les repeints. Certains repeints peuvent être ignorés pour que l'interface reste bien réactive.Dans l'exemple ci-dessus, le DOM est toujours en cours de recalcul pour le débordement de texte. Nous pouvons voir le débogueur clignoter fortement. Cela compte vraiment sur les éléments en cascade! Cela peut encore ralentir le javascript et le défilement des utilisateurs.
Pleine puissance : il est possible d'utiliser css seul pour actualiser les données avec la
content
règle css et les variables css. Le texte ne sera alors plus sélectionnable.Mes tests ont montré de grandes améliorations, le moteur javascript saute rapidement sur d'autres tâches. Parfois, il peut démarrer un peu plus lentement que l'exemple ci-dessus. Mais à côté de cela, cela ne bloque pas les parchemins des utilisateurs, et le débogueur aime aussi, plus de sauts.
la source