Наплыв, а не кросфейд

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

Я несколько раз перепроверил код, кроссфейды работали чётко и, по идее, должны были давать неизменяющуюся насыщенность цвета в одинаковых фрагментах двух картинок, или 20% + 80% не равно 100%?
Симметричный кросфейд

Как выясняется на практике, не равно. Артём Горбунов посоветовал так кросфейдить картинки, чтобы сумма их прозрачностей всегда была больше 100%, сказав, что это изобрёл Илья Бирман. Я попробовал удлинить вдвое время исчезновения одной из картинок и это дало хороший результат.
Несимметричный кросфейд

Потом ещё и ещё увеличивал разницу между скоростями фейдина и фейдаута, пока не дошёл до идеальной формулы кросфейда:
Наплыв, а не кросфейд

Вообщем, это уже и не кросфейд получился, а наплыв, или как там его правильно называть. Смотрите пример, демонстрирующий разницу между этими способами переключения картинок:
http://artpolikarpov.ru/html/fade/
Добавлено утром: В комментариях справедливо замочили меня за неправильную работу примеров. Теперь, благодаря замечанию Игоря Барабашина, ЦСС исправлен и всё должно работать, как надо.

А ещё Александр Карпинский написал крутой комментарий:
С одной стороны, мне хочется поворчать, что здравый смысл изобрел Илья Бирман. Это не так, здравый смысл всегда говорил — два непрозрачных объекта один позади другого будут вцелом непрозрачными. Чтобы сделать перетекание, нужно стобы прозрачность менялась у ближнего, а дальний так и оставался непрозрачным.

С другой стороны, хочется поворчать по поводу фразы «или 20% + 80% не равно 100%?». Ну правда, откуда этот плюс? На самом деле там, если 0,8 — непрозрачность ближнего, то общая непрозрачность = 0,8 + 0,2 * (1 — 0,8) = 0, 84.

Ну и еще оговорка: Если картинки сами будут полупрозрачными, то их интенсивность при таком способе будет больше чем нужно.
Поделиться
Отправить
18 комментариев
Grawl
На странице примера первая фоторама не “моргает”, вторая — “моргает”.
Non est
Странно, но первый пример действительно не моргает, в отличии от второго.
shamansir
Поддерживаю, первый пример выглядит значительно лучше второго (первый — не моргает, второй — моргает)
Александр Карпинский
С одной стороны, мне хочется поворчать, что здравый смысл изобрел Илья Бирман. Это не так, здравый смысл всегда говорил — два непрозрачных объекта один позади другого будут вцелом непрозрачными. Чтобы сделать перетекание, нужно стобы прозрачность менялась у ближнего, а дальний так и оставался непрозрачным.

С другой стороны, хочется поворчать по поводу фразы «или 20% + 80% не равно 100%?». Ну правда, откуда этот плюс? На самом деле там, если 0,8 — непрозрачность ближнего, то общая непрозрачность = 0,8 + 0,2 * (1 — 0,8) = 0, 84.

Ну и еще оговорка: Если картинки сами будут полупрозрачными, то их интенсивность при таком способе будет больше чем нужно.
Александр Смердов
Кажется мы тут разные явления называем словом «Моргание».
Но я действительно за второй вариант для данной ситуации — наплыв выглядит реалистичнее.
Артём, я бы снабдил описание раскадровкой обоих способов, пометив что же именно названо морганием.
Саша Кошкин
В хроме мигает больше наплыв, а в фаерфоксе всё так, как и описано в этой заметке.
Александр Смердов
И правда, подтверждаю. В Опере всё ОК, а в Хроме второй вариант моргает почище первого (правда и первый тоже всё-равно моргает).
Grawl
Chrome Stable, Mac OS.
Первый вариант делает мягкий flash, а второй — резкий. Первый нравится больше.
(Прошлый тест был в Safari)
Валерий Попов
Первая фоторама моргает плавно с фейдом, а вторая моргает резко, без фейда, будто глаза лопаются.

Мак, ГугльХром
Игорь Барбашин
Артем, действительно моргание во втором есть в хроме на маке. Но это его корявая работа с 3d транзишенами. В конкретно этом случае если убрать третью строчку из твоего css, моргание пропадает.

.fotorama * { -webkit-backface-visibility: hidden; }
Игорь Барбашин
А по теме заметки полностью согласен. Меня всегда раздражало как работал фейд в jCycle (http://jquery.malsup.com/cycle/). Видно как кадры бледнеют на полпути.

А вот в Nivo (http://nivo.dev7studios.com/) сделано как у тебя во втором варианте. Намного лучше.
Grawl
Но Fotorama далеко обгоняет Nivo благодаря физике, благодаря которой можно хоть SpringBoard сделать.
Артём Поликарпов
Спасибо внимательным комментаторам. Обновил пример, посмотрите ещё раз.
Grawl
Вот теперь так, как надо.
Артём Самохин
Круто!
Игорь Барбашин
@Grawl, не подумайте что я сравнивал Nivo с фоторамой. Оба хороши для своих целей)

Кстати, я тут пытался как-то спрингборд сделать вот тут http://appcomments.com/ справа сверху.
Денис Талала
Я тоже однажды сталкивался с морганием; особенных хлопот оно доставляет, если цвет фона «Фоторамы» отличается от цвета общего фона страницы, тогда приходится придумывать всякие финты.

Насколько я понимаю, в следующих версиях будет внедрён именной такой кроссфейд без моргания. Артём, а что нужно исправить в старой версии скрипта, чтобы у меня не было моргания (если при этом я не хочу хочу обновляться, а желаю оставить старую версию «Фоторамы»)?
Артём Поликарпов
Не знаю. Лучше напомни, что нужно добавить в новую Фотораму, чтобы ты всё-таки обновился?
Денис Талала
Предыдущие версии «Фоторамы» мне нравятся тем, что в них по умолчанию как бы почти ничего нет. Загрузилась страничка, загрузилась какая-то картинка, а под ней пимпочки-переключалки. Это всё, что мне нужно. :)

Новую «Фотораму» я пока избегаю использовать по единственной причине: она меняет размер фоток под себя, а не наоборот, свой размер под каждую фотку.

Сейчас сразу после подключения новая версия показывает «ромашку» загрузки, превьюшки, стрелочки-листалки, тени под фотками и курсор-лапку. Переключения на десктопе происходят «перетягиванием», а размер кадров подстраивается под размер первой фотки. Всё это очень здорово, мне нравится, но у меня лично сейчас в этом нет необходимости, и эти штуки пришлось бы отключать вручную, а в старой версии пока и так всё хорошо настроено. Вот бы ещё кроссфейд без моргания, было бы совсем супер.

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