Eu quero ter uma página da web que tenha uma palavra centralizada.
Quero que essa palavra seja desenhada com uma animação, de modo que a página "escreva" da mesma maneira que gostaríamos, ou seja, começa em um ponto e desenha linhas e curvas ao longo do tempo, de modo que o resultado final seja um glifo.
Não me importo se isso é feito com <canvas>
ou o DOM, e não me importo se é feito com JavaScript ou CSS. A ausência do jQuery seria boa, mas não necessária.
Como posso fazer isso? Eu procurei exaustivamente sem sorte.
javascript
css
canvas
html5-canvas
css-shapes
strugee
fonte
fonte
Respostas:
Versão Canvas
Isso irá desenhar caracteres únicos mais como se fosse escrever à mão. Ele usa um longo padrão de traço em que a ordem on / off é trocada ao longo do tempo por caractere. Também possui um parâmetro de velocidade.
Exemplo de animação (veja a demonstração abaixo)
Para aumentar o realismo e a sensação orgânica, adicionei espaçamento aleatório de letras, deslocamento y delta, transparência, uma rotação muito sutil e, finalmente, usando uma fonte já "manuscrita". Eles podem ser agrupados como parâmetros dinâmicos para fornecer uma ampla variedade de "estilos de escrita".
Para uma aparência ainda mais realista, os dados do caminho seriam necessários, o que não é por padrão. Mas este é um código curto e eficiente que aproxima o comportamento escrito à mão e fácil de implementar.
Como funciona
Ao definir um padrão de traço, podemos criar formigas marchando, linhas pontilhadas e assim por diante. Aproveitando-se disso, definindo um ponto muito longo para o ponto "desligado" e aumentando gradualmente o ponto "ligado", ele dará a ilusão de desenhar a linha quando pressionada enquanto anima o comprimento do ponto.
Como o ponto desativado é tão longo, o padrão de repetição não será visível (o comprimento varia de acordo com o tamanho e as características do tipo de letra que está sendo usado). O caminho da carta terá um comprimento; portanto, precisamos ter certeza de que cada ponto está cobrindo pelo menos esse comprimento.
Para letras que consistem em mais de um caminho (ex. O, R, P etc.) como um é para o contorno, um é para a parte oca, as linhas parecerão ser desenhadas simultaneamente. Não podemos fazer muito sobre isso com essa técnica, pois exigiria o acesso a cada segmento de caminho a ser traçado separadamente.
Compatibilidade
Para navegadores que não suportam o elemento canvas, uma maneira alternativa de mostrar o texto pode ser colocada entre as tags, por exemplo, um texto estilizado:
Demo
Isso produz o traçado animado ao vivo ( sem dependências ) -
fonte
Editar 2019
Eu criei uma biblioteca javascript que pode criar animações realistas. É fácil de usar e requer um arquivo JSON especial que atua como fonte.
Confira a página do Github para obter documentação e exemplos. E Codepen
Resposta Anterior
O exemplo abaixo usa snap.js para criar
tspan
elementos dinamicamente e animar cada um delesstroke-dashoffset
.Mostrar snippet de código
Resposta Anterior
Você pode fazer algo assim usando svg's
stroke-dasharray
Mostrar snippet de código
Sem
keyframes
animação, você pode fazer algo assimMostrar snippet de código
E para suporte ao IE, você pode usar jquery / javascript
Mostrar snippet de código
fonte
$(this).css('fill', 'red')
como uma chamada de retorno para a animaçãoSomente CSS:
fonte
Após muitos testes, aqui estão algumas notas. O objetivo é exibir dados de texto rápidos da maneira menos obstrutiva, em páginas pesadas do DOM que exigem interações dos usuários.
É claro que existem muitas maneiras de conseguir a mesma coisa. Neste exemplo, as diferenças podem não ser óbvias, elas realmente se aplicam a interfaces complexas.
Mais lento :
innerHTML
estilo em linha. O DOM é recalculado a cada iterações. O navegador está trabalhando duro para manter o trem. Ele falhará rapidamente, causando vazamentos e congelamentos de memória:Muito melhor : Usando
textContent
,requestAnimationFrame
ea API de animação web. Isso fica mais suave, é óbvio nas páginas pesadas do DOM. As interações do usuário não bloqueiam as repetições. Algumas repetições podem ser ignoradas, para manter a interface bem responsiva.No exemplo acima, o DOM ainda está sendo recalculado para o excesso de texto. Podemos ver o depurador piscando bastante. Isso realmente importa em elementos em cascata! Isso ainda pode atrasar a rolagem de javascript e usuário.
Potência total : é possível usar o css sozinho para atualizar os dados com a
content
regra css e as variáveis css. O texto não será selecionável.Meus testes mostram grandes melhorias, o mecanismo javascript está pulando rapidamente em outras tarefas. Às vezes, pode começar um pouco mais lento que o exemplo acima. Mas, além disso, isso não bloqueia a rolagem dos usuários, e o depurador também está gostando, sem mais pulos.
fonte