Джинн анимация Javascript? - PullRequest
       15

Джинн анимация Javascript?

9 голосов
/ 05 апреля 2010

Существует ли плагин jQuery или библиотека javascript, которая поддерживает анимационный эффект «джинна», как док-станция Apple Mac OS X?

Бонус: библиотека Actionscript? C / C ++? .СЕТЬ? Цель C?

Ответы [ 5 ]

9 голосов
/ 05 апреля 2010

Не то, что я знаю. Эффект «джинна» - это искажение, которого невозможно достичь с помощью CSS: преобразования CSS (включая матричный фильтр IE) позволяют изменять размер по осям, повороту и сдвигу. WebKit дополнительно дает вам линейные перспективы. Пышные искажения, такие как джин, не могут быть воспроизведены этими инструментами.

Чтобы сделать это в JavaScript, вам нужно разделить изображение (или другой элемент, если вы действительно амбициозны) на одну строку на пиксель и сжать по горизонтали, используя преобразование CSS. Это было бы ужасно неэффективно для рендеринга и, вероятно, выглядело бы прерывистым и мерцающим, а также неприятно наложенным.

8 голосов
/ 02 июня 2013

Мне удалось воспроизвести этот эффект с помощью JS + CSS ... он еще не закончен, но вот предварительный просмотр анимации в действии:

http://www.youtube.com/watch?v=UwUxo-R-mzU

3 голосов
/ 16 февраля 2014

Вдохновленный реализацией Хакана, я написал свою версию библиотеки переходов Genie Effect.

Выезд https://github.com/kamilkp/geniejs

и http://kamilkp.github.io/ для демонстрации.

Работает в любом браузере, включая мобильный (хотя не всегда гладко в Firefox). Он поддерживает переходы Genie Effect во всех направлениях (сверху, снизу, слева, справа). Это работает, даже если целевой html-элемент является дочерним по отношению к некоторому контейнеру, у которого переполнение auto или скрыто. Это не зависит от библиотеки, но я также написал удобный плагин jQuery. И если вы также включите в свой проект библиотеку html2canvas, этот плагин позволит вам анимировать HTML-элементы с эффектом джинна (пример для расширения здесь: http://kamilkp.co.nf/genie/canvas/)

Единственное требование к браузеру - поддержка CSS-переходов. Это чистое решение javascript + CSS.

0 голосов
/ 11 марта 2014

Это можно сделать, используя чистое CSS-преобразование, но намного проще, используя SASS. Общая идея заключается в том, что вы хотите плавно преобразовать прямоугольник в треугольник (чтобы на полпути через него была трапеция). Проблема в том, что любое линейное преобразование преобразует прямоугольник в параллелограмм (квад со всеми параллельными сторонами), и мы хотим треугольник. Это означает, что нам нужно нелинейное преобразование. Хорошая новость заключается в том, что вы можете выполнять нелинейные преобразования, делая вид, что это преобразования в 3D, а затем проецируя прямоугольник в 2D-пространство экрана. Подумайте о длинном тротуаре - он выглядит как треугольник. Поэтому мы хотим повернуть прямоугольник и сделать его очень длинным.

Преобразования для первого и последнего ключевых кадров анимации очень просты: первое имеет преобразование идентичности, а последнее имеет

 -webkit-transform: matrix3d(
   1,   0,  0, 0, 
   0 ,  1,  0, -9/$height,
   0,   0,  1, 0, 
   0,   0,  0, 10
 );

единственный интересный столбец - последний, в котором указано, что расстояние от зрителя должно составлять 10 "для пикселей в верхней строке и уменьшаться до 10-9 = 1 для самых нижних пикселей.

Проблема связана с промежуточными кадрами, так как алгоритм интерполяции по умолчанию, используемый браузерами, пытается интерпретировать матрицы как композицию элементарных операций, таких как вращения и переводы, а затем интерполирует каждую операцию независимо. И поскольку наше окончательное преобразование напоминает вращение на 90 в сочетании с бесконечным растяжением, интерполяция будет пытаться выполнять вращение и растяжение одновременно, что выглядит довольно странно, поскольку одно из этих движений «круговое», а другое «линейное» и скорость два не совпадают.

Чтобы компенсировать это, можно генерировать много промежуточных кадров, и для этого я использую SASS. Окончательный результат здесь: http://codepen.io/anon/pen/ApHkc

И большая часть кредита для этого решения должна пойти автору http://persistent.info/web-experiments/distortion/, который убедил меня, что это возможно. Также обратите внимание, что, возможно, существует много различных преобразований, которые преобразуют данный прямоугольник в данный треугольник, которые отличаются только способом отображения их внутренних областей - возможно, мое решение не является лучшим в этом отношении.

0 голосов
/ 05 июля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...