Я подумываю сделать анимированную инфографику на основе технологий SVG, Javascript и CSS временной шкалы. У меня есть большой опыт в программировании, но не так много в использовании этих технологий для анимации чего-либо (это означает, что вы, возможно, могли бы сказать мне, что я должен подойти к проблеме по-другому).
С помощью Inkscape
я могу создать большое изображение SVG (большое по горизонтали, а также относительно большое по размеру файла, если только я не избегаю встраивания пиксельной графики). SVG содержит множество полей для событий (групп SVG), которые я хотел бы увеличить при нажатии, чтобы можно было увидеть детали. Я думаю, я мог бы создать рабочую анимацию, которая показывает весь SVG и позволяет увеличивать все блоки по отдельности.
Однако, поскольку временная шкала очень длинная, необходимо масштабировать ее так, чтобы в каждый момент времени была видна только ее часть. Должны быть какие-то кнопки, которые позволяют пользователю перемещаться влево или вправо, чтобы отображать более ранние или более поздние события. Но тем не менее, всякий раз, когда пользователь щелкает одно из событий, оно должно увеличиваться.
Вот концепция в картинках (меньший большой блок должен быть экраном или видимой частью изображения):
Мне интересно, возможен ли такой подход (как мне подойти к комбинации двух функций?). Другим вариантом было бы создать отдельный SVG или что-то еще для каждого из событий и расположить их по-разному на экране.
Поскольку мне нужно будет повторять это много раз для разных или обновленных временных шкал, мне придется делать большую часть этого программно, работая с исходными текстовыми файлами. Однако, если такая единая временная шкала может быть создана с помощью какого-либо инструмента, из чьего вывода я могу узнать, как это сделать, я открыт для предложений. В этом случае мне нужно знать, как это сделать.
Кроме того, было бы, конечно, очень полезно иметь рабочий пример, если существует что-то сопоставимое.
Возможно ли это?
Да . Точно так же, как вы думали об этом, это определенно возможно сделать так. Лучше задать вопрос: «Есть ли лучшие способы сделать это?» в этом случае я бы ответил , вероятно .
Единственный раз, когда я бы использовал для этого SVG, это если большинство элементов, которые вы хотите увеличить, изначально являются SVG (например, значки), которые вы пытаетесь проиллюстрировать чем-то подобным. Вы можете анимировать окно просмотра SVG, чтобы выполнить горизонтальную прокрутку, и выполнить некоторую пользовательскую функцию масштабирования, чтобы увеличить определенные элементы (возможно, сохранив окно просмотра перед масштабированием, чтобы вы могли вернуться к нему).
Если есть много текста, фотографий или чего-то еще, кроме того, что обычно является SVG, я бы предпочел не использовать этот подход.
Если вы используете этот подход, обязательно оптимизируйте свои SVG, следуя некоторым правилам и используя некоторые инструменты .
Вместо этого я бы использовал подход, заключающийся в создании обычной веб-страницы с горизонтальной прокруткой. Затем я бы использовал элементы HTML для более мелких частей. Одна из причин этого заключается в том, что уменьшенный (маленький) контент не читается. Но если вы вместо этого используете предварительный просмотр содержимого в этом «немасштабированном» представлении, вы можете вместо «масштабирования» (если это не было изображение или что-то подобное статичному) вы можете открыть полное содержимое (или, возможно, даже новый страница).
Под этим я подразумеваю использование переходов , подобных рекомендациям Google по материальному дизайну . Такие виды анимации могут быть созданы с относительной легкостью (человеком, который знает, что он делает) с помощью JavaScript, но у Polymer есть некоторые встроенные функции , если вы хотите использовать для этого фреймворк.
Вы можете добавить несколько кнопок для горизонтальной прокрутки, но если вы используете этот подход, я рекомендую вам не отключать обычный способ прокрутки. Важно указать, что страница прокручивается горизонтально, потому что пользователи не привыкли к такому типу движения.
Используя этот подход, вы можете обрабатывать все виды содержимого и по-прежнему делать тот же тип масштабирования, о котором вы говорите для SVG и подобных типов.
Некоторые положительные стороны этого подхода:
Зак Сосье
крутой парень