Я хочу иметь веб-страницу с одним центрированным словом.
Я хочу, чтобы это слово было нарисовано с помощью анимации, чтобы страница «записывала» слово так же, как и мы, то есть оно начинается в одной точке и рисует линии и кривые с течением времени, так что конечным результатом является глиф.
Мне все равно, будет ли это сделано с <canvas>
помощью DOM, и мне все равно, будет ли это сделано с помощью JavaScript или CSS. Отсутствие jQuery было бы неплохо, но не обязательно.
Как я могу это сделать? Я искал исчерпывающе без удачи.
javascript
css
canvas
html5-canvas
css-shapes
strugee
источник
источник
Ответы:
Холст версия
Это будет рисовать отдельные символы больше, чем можно было бы написать вручную. Он использует длинный штрих-шаблон, в котором порядок включения / выключения меняется со временем на символ. Он также имеет параметр скорости.
Пример анимации (см. Демо ниже)
Чтобы повысить реалистичность и органичность, я добавил случайный межбуквенный интервал, смещение по оси y, прозрачность, очень тонкое вращение и, наконец, использование уже «рукописного» шрифта. Они могут быть упакованы как динамические параметры, чтобы обеспечить широкий диапазон «стилей письма».
Для еще более реалистичного вида потребовались бы данные пути, которых нет по умолчанию. Но это короткий и эффективный фрагмент кода, который приближает рукописное поведение и прост в реализации.
Как это устроено
Определяя рисунок тире, мы можем создавать марширующих муравьев, пунктирные линии и так далее. Воспользовавшись этим, определив очень длинную точку для точки «выкл» и постепенно увеличивая точку «вкл», это создаст иллюзию рисования линии при нанесении штрихов при анимации длины точки.
Поскольку точка смещения слишком длинная, повторяющийся узор не будет виден (длина будет зависеть от размера и характеристик используемого шрифта). Путь письма будет иметь длину, поэтому мы должны убедиться, что каждая точка хотя бы покрывает эту длину.
Для букв, состоящих из более чем одного пути (например, O, R, P и т. Д.), Как один для контура, один для полой части, линии будут отображаться одновременно. Мы не можем ничего с этим поделать с помощью этой техники, так как для этого потребуется доступ к каждому сегменту пути, который будет обводиться отдельно.
Совместимость
Для браузеров, которые не поддерживают элемент canvas, между тегами можно разместить альтернативный способ отображения текста, например стилизованный текст:
демонстрация
Это производит живой анимированный удар ( без зависимостей ) -
источник
Изменить 2019
Я создал библиотеку JavaScript, которая может создавать реалистичные анимации. Он прост в использовании и требует специального файла JSON, который действует как шрифт.
Извлекает страницу GitHub для документации и примеров. И Codepen
Предыдущий ответ
В приведенном ниже примере используется snap.js для динамического создания
tspan
элементов, а затем анимировать каждый из нихstroke-dashoffset
.Показать фрагмент кода
Предыдущий ответ
Вы можете сделать что-то подобное, используя svg
stroke-dasharray
Показать фрагмент кода
Без
keyframes
анимации вы можете сделать что-то вроде этогоПоказать фрагмент кода
А для поддержки IE вы можете использовать jquery / javascript
Показать фрагмент кода
источник
$(this).css('fill', 'red')
в качестве обратного вызова анимацииТолько CSS:
источник
После многих тестов, вот некоторые заметки. Цель состоит в том, чтобы отображать быстрые текстовые данные с наименьшей блокировкой, на тяжелых страницах DOM, требующих взаимодействия с пользователем.
Есть, конечно, много способов достичь того же. В этом примере различия могут быть неочевидными, это действительно относится к сложным интерфейсам.
Самый медленный :
innerHTML
и встроенный стиль. DOM пересчитывается на каждой итерации. Браузер усердно работает, чтобы сохранить поезд. Он быстро перестает работать, вызывая утечки памяти и зависает:Путь лучше : использование
textContent
,requestAnimationFrame
и веб - анимации апи. Это идет намного лучше, это очевидно на тяжелых страницах DOM. Взаимодействие с пользователем не блокирует перерисовки. Некоторые перерисовки могут быть пропущены, чтобы интерфейс хорошо реагировал.В приведенном выше примере DOM все еще пересчитывается для переполнения текста. Мы видим, что отладчик сильно мигает. Это действительно важно для каскадных элементов! Это все еще может замедлить JavaScript и пользовательские прокрутки.
Полная мощность : можно использовать только css для обновления данных с помощью
content
правила css и переменных css. Текст тогда не будет доступен для выбора.Мои тесты показывают большие улучшения, движок javascript быстро пропускает другие задачи. Иногда это может начаться немного медленнее, чем в приведенном выше примере. Но помимо этого, это не блокирует пользовательские прокрутки, и отладчик также нравится, больше никаких переходов.
источник