sonyps4.ru

Эффект параллакса html. Разные ошибки и способы их устранения

Всем привет. Сегодня расскажу вам о небольшом скрипте для создания простого parallax эффекта.

Статья будет короткой, но информативной, так что уже минут через 15 вы сможете добавить параллакс на свой лендинг. Если вы давно хотели добавить этот интересный эффект на сайт, то читайте дальше…

Что такое параллакс эффект на сайте

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

Как сделать параллакс эффект на сайте

Итак, первым делом подключаем библиотеку jquery. Как обычно, между тегами head:

Теперь, нужно скачать подключить скрипт Simple Parallax Scrolling . Я рекомендую использовать сразу сжатую версию, так как дополнительных настроек внутри скрипта делать не понадобится:

Теперь, давайте разберемся, что нужно прописать на html страничке, чтобы заработал наш параллакс эффект.

Smartlanding Создание landing page

Data-parallax="scroll"

Data-image-src="путь к картинке/bg.png"

Обратите внимание, что картинка не кладется в шапку при помощи тега img, а задается непосредственно в атрибутом в том контейнере, в котором хотим реализовать parallax.

На этом, в принципе, можно заканчивать, но еще пару слов:

  • Если в dive, в котором хотим реализовать параллакс эффект нет других элементов, то необходимо задать ему высоту, иначе ничего не увидите.
  • В случае использования не адаптивного дизайна, можно задать ширину и высоту изображения прямо в html при помощи атрибутов naturalWidth и naturalHeight.
  • Можно двигать изображения при помощи атрибута data-position. Это аналог background-position в css.

С остальными опциями можете ознакомиться на официальной страничке проекта, которая указана выше.

В этой статье показывается, как с помощью CSS трансформаций и махинаций с 3d сделать параллакс-эффект на сайте на чистом CSS.

Параллакс почти всегда создаётся с помощью JavaScript и, чаще всего, получается ресурсоёмким, из-за вешания листенеров на событие скролла, модификации DOM напрямую и срабатывания ненужных перерисовок и перестановок. Всё это происходит асинхронно с потоком, в котором браузер рендерит страницу, из-за чего скролл начинает подтормаживать, а картинка рваться на части. Более правильные реализации параллакса отслеживают скролл и используют отложенные обновления DOM с помощью requestAnimationFrame . Получается качественной другой результат, но почему бы вообще не избавиться от JavaScript?

Перенос параллакс эффекта в CSS спасает от проблем с производительностью и лишних манипуляций, позволяя браузеру самому всё регулировать за счёт аппаратного ускорения. В результате, почти все ресурсоёмкие процессы обрабатываются напрямую браузерным движком. Частота кадров (FPS) остаётся стабильной, а картинка становится плавной. Плюс, можно сразу комбинировать параллакс с другими CSS фишками - media queries или supports. Отзывчивый параллакс - каково?

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

... ... ...
И базовые стили:

Parallax { perspective: 1px; height: 100vh; overflow-x: hidden; overflow-y: auto; } .parallax__layer { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } .parallax__layer--base { transform: translateZ(0); } .parallax__layer--back { transform: translateZ(-1px); }
Вся магия происходит в классе parallax . Определение свойств стилей height и perspective установит перспективу элемента в его центре, создав фиксированный 3D вьюпорт. overflow-y: auto позволит контенту внутри элемента нормально скроллиться, при этом потомки элемента будут отрисовываться относительно фиксированной перспективы. В этом и заключается ключ к созданию параллакс эффекта.

Далее, класс parallax__layer . Как и следует из имени, он определяет слой контента, к которому будет применен параллакс эффект. Элемент с этим классом выдирается из общего потока контента и позиционируется так, чтобы заполнить свой контейнер.

Наконец, у нас есть классы-модификаторы parallax__layer--base и parallax__layer--back . Они нужны, чтобы регулировать скорость скролла параллакс элементов, смещая их по оси Z (удаляя или приближая к вьюпорту). Для краткости я сделал всего две скорости скролла - позже мы добавим еще несколько.

Коррекция глубины Так как параллакс эффект создаётся за счёт 3D преобразований, смещение элемента по оси Z имеет побочный эффект - размеры элемента меняются, в зависимости от того, ближе или дальше он к вьюпорту. Чтобы исправить это, нам нужно применять scale() трансформацию, чтобы элемент отрисовывался в своём изначальном размере:

Parallax__layer--back { transform: translateZ(-1px) scale(2); }
Коэффицент скейла можно посчитать по формуле 1 + (translateZ * -1) / perspective) . Например, если перспектива вьюпорта задана как 1px и мы смещаем элемент на -2px по оси Z, то коэффицентом будет scale(3) .

Parallax__layer--deep { transform: translateZ(-2px) scale(3); }

Регулирование скорости слоя Скорость слоя регулируется комбинацией значений перспективы и смещения по Z. Элементы с отрицательными значениями Z будут скроллиться медленнее, чем элементы с положительными значениями. Чем больше разность значения от 0, тем явнее параллакс эффект
(т.е. translateZ(-10px) будет скроллиться медленнее, чем translateZ(-1px)).Создание разных участков параллакс эффекта Предыдущие примеры демонстрировали базовую технику использования простого контента, но ведь большинство параллакс сайтов делят страницу на разные участки с разными эффектами. Вот как можно реализовать это в нашем методе.

Во-первых, нам нужен элемент parallax__group , чтобы сгруппировать наши слои вместе:

... ... ...
для него CSS будет выглядеть так:

Parallax__group { position: relative; height: 100vh; transform-style: preserve-3d; }
В этом примере я хочу, чтобы каждая группа заполнила вьюпорт, поэтому я задаю height: 100vh , хотя, если нужно, число для каждой группы может быть разным. transform-style: preserve-3d не даёт браузеру сделать плоскими элементы с parallax__layer , а position: relative позволяет дочерним parallax__layer элементам позиционироваться относительно их группы.

Важное правило, которое нужно помнить - при группировке элементов мы не можем обрезать контент внутри группы, тк overflow: hidden у элемента parallax__group сломает весь параллакс эффект. Необрезанный контент приведёт к тому, что дочерние элементы будут выступать за рамки. Поэтому нужно пошаманить с значением z-index у группы, чтобы быть уверенным, что контент будет корректно прятаться и показываться по мере того, как пользователь будет скроллить сайт.

Нет никаких жестких или быстрых правил по поводу работы со слоями и разные методы подразумевают разную реализацию. Но, чтобы упростить отладку позиционирования слоёв, можно применить простую трансформацию групповых элементов:

Parallax__group { transform: translate3d(700px, 0, -800px) rotateY(30deg); }
Взгляните на следующий пример и обратите внимание на галочку debug !

, Turtles in Time или оригинальную игру Moon Patrol . В этих играх техника параллакса наблюдается в тот момент, когда несколько фоновых слоев с различными текстурами двигаются с разной скоростью, что создает эффект трехмерного пространства.

Почему я начал говорить о ретро-играх в статье о веб-разработке? Самым простым ответом мог бы быть «потому что они клевые», но нет. Параллакс-скроллинг является классным дизайнерским концептом, который прокладывает свой путь в мир веб-дизайна. Nike были одними из первых, кто использовал эту технику с большим успехом, когда они наняли маркетинговых гигантов Weiden and Kennedy для разработки их оригинального сайта Nike Better World. Сайт Nike Better World с того времени был обновлен и заменен на новый, однако есть другой сайт, довольно похожий на то, как выглядел первый параллакс-дизайн от Nike - сайт о спортивных напитках Activate .



Наверное, вы заметили, что во время прокрутки страницы сайта вниз несколько различных элементов, находящихся на этой странице, двигаются с разной скоростью. Давайте для примера возьмем страницу, отображенную на картинке сверху. По мере прокрутки страницы вниз вы увидите, что голубые точки в фоне (те, которые немного размыты), двигаются с той же скоростью, что и скроллбар. Также, вы увидите, что группа голубых точек, которые более сфокусированы и лежат на переднем плане, двигаются с немного большей скоростью, чем скроллбар. Быстрее этих точек двигается текст “0 SUGAR | 0 CALORIES | NATURALLY SWEETENED” и главный заголовок страницы “Products”. И, наконец, есть изображения самого продукта, как маленькие и расфокусированные в фоне, так и большие, сфокусированные и лежащие на переднем плане. Фоновые изображения продуктов двигаются с той же скоростью, что и текст, в то время как изображения продуктов на переднем плане двигаются быстрее этого текста. Это все и является идеальной демонстрацией параллакс-скроллинга, когда разные слои изображений накладываются друг на друга и все движутся с разной скоростью при прокрутке страницы, создавая эффект трехмерности.

Параллакс-скроллинг не ограничивается только вертикальным скроллом страницы или скроллингом по прямой линии. Отдадим право Nintendo для демонстрации идеального примера, подтверждающего это утверждение. Вспомните ранние игры Nintendo, где наши герои обычно двигались горизонтально слева направо вдоль экрана, а не вертикально вниз, как мы видели это на сайте Activate выше. Прокатитесь на MarkioKart Wii и давайте поговорим о некоторых клевых штуках, которые мы там можно увидеть.

Первую вещь, которую вы заметите, это направление скроллинга страницы - оно не вертикальное, а как сказано выше, а изначально горизонтальное. Конечно, это круто, но это также не новый концепт. Также, вы заметите параллакс-эффект с динозавром Йоши и панцирями на фоне, Марио и Луиджи на переднем плане и основным контентом, которые смещаются с разной скоростью при прокрутке. Но как только вы доедете до страниц #highlights и #attack, траектория смещения перестанет быть идеально горизонтальной. То же самое касается перехода между страницами #rediscover и #snes. Изображения не только сохраняют свою разную скорость смещения, но и меняют общее направление с горизонтального на вертикальное.

Стоит также отметить, что использование эффекта параллакса на вашем сайте не должно быть ограничено лишь возможностью создания искусственного 3D-эффекта. Сайт немецкой студии веб-дизайна Webseitenfactory является примером того, как можно использовать параллакс для добавления различных эффектов на страницу сайта, например движение иконок по разным траекториям, их увеличение и уменьшение по мере скроллинга сайта.

Параллакс-скроллинг также может помочь оживить сайт, на котором не особо много контента. Что если весь ваш сайт состоит из mission statement, или раздела about us, плюс контактная информация? Скорее всего, вы бы могли сделать это одной страницей и при определенных условиях у вас бы получился неплохой одностраничный сайт, но запомнится ли он посетителям? Скорее всего, нет. Но что если добавить к нему немного параллакса, как это сделал народ на Spring / Summer ?

Моим первым впечатлением было “О, этот сайт выглядит симпатично”. Но когда я начал его скролить, впечатление сразу же стало “Вау, этот сайт крут!”. Добавление простого параллакс-эффекта как раз делает разницу между неплохим и запоминающимся.

Параллакс-скроллинг - это хороший трюк, который можно держать в рукаве. И его всегда можно применить независимо от того, делаете ли вы сложный мультистраничный сайт, или же простой одностраничный сайт-визитку.

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

| 29.09.2014

Добрый день, дорогие читатели! Наш сегодняшний рейтинг, состоящий из 10-ти мест, посвящен не обычным сайтам. Сайты в этом списке ТОП-10 имеют одну общую особенность – эффект параллакса.

Специально для тех, кто еще не в курсе, что это такое, мы вкратце расскажем об этом эффекте, который уже начал интенсивно набирать обороты и становится все более популярным в сфере веб-дизайна.

Итак, параллакс-эффектом, либо параллакс-скроллингом называется специальная техника, при которой объекты на заднем плане в перспективе движутся медленнее, чем объекты на переднем плане. За счет этого создается эффект 3D, появляется ощущение трехмерного пространства. Параллакс-скроллинг – отличный способ добавить изюминку в одностраничный сайт, оживить инфографику, поведать историю или продемонстрировать портфолио. А некоторые работы современных дизайнеров можно с полной уверенностью назвать произведениями искусства… Впрочем, лучше один раз увидеть, чем сто раз услышать – ознакомьтесь с нашим ТОП-10 сайтов и взгляните сами!

Обратите внимание: некоторые сайты с parallax scrolling бывают ресурсозатратны из-за множества эффектов, поэтому не исключается «подтормаживание» на определенных компьютерах и портативных устройствах.

Grab & Go

Десятое место в нашем рейтинге занимает сайт Grab & Go, где параллакс-эффект используется в качестве украшения и оживления картинки. При движении курсора можно наблюдать, как одновременно перемещаются дома и деревья на заднем фоне. Согласитесь, за счет этой изюминки есть шанс, что сайт лучше запомнится посетителю.

DigitalHands

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

Madwell

Нью-Йоркское креативное агентство Madwell демонстрирует свое портфолио на главной странице сайта, умело используя параллакс-эффект. Ощущение 3D не покидает пользователя на протяжении всего времени прокрутки.

Oakley

Любой товар нуждается в правильном представлении. На сайте магазина Oakley параллакс-скроллинг используется для демонстрации преимуществ защитных очков Airbrake MX. Получилось довольно впечатляюще и познавательно, поскольку продукцию можно рассмотреть и изучить со всех сторон, просто пользуясь скроллом.

Make Your Money Matter

Мало кого из людей не волнует тема личных финансов. Сайт Make Your Money Matter, занявший 6-е место нашего рейтинга, в доступной форме раскрывает зрителям преимущества кредитного союза и рассказывает о минусах банков. Здесь можно воспользоваться калькулятором, который покажет, какую прибыль получают банки благодаря вложениям клиентов, а также найти отделения кредитных кооперативов по почтовому индексу.

Space Needle

Хотели бы вы изучить Сиэтл с высоты 184 метра? Сайт Space Needle отправит вас в виртуальную прогулку по самой узнаваемой достопримечательности города – башне Спейс-Нидл (Space Needle), что в переводе с английского означает «космическая игла». Эта башня высотой 184 м, шириной 42 м и весом 9 550 тонн выдерживает ураганы со скоростью ветра до 320 км/ч и землетрясения до 9,1 балла. К тому же, у башни есть 25 громоотводов. Отличительной особенностью Спейс-Нидл является обзорная площадка на высоте 159 метров, ресторан SkyCity и магазин подарков. С ее вершины можно увидеть центр Сиэтла, вулкан Рейнир, Каскадные горы, залив Элиот и окружающие острова.

Peugeot Hybrid4 - Graphic Novel

Крупнейший французский автопроизводитель Peugeot довольно неординарным образом презентовал систему гибридного привода Hybrid4. Перед нашими глазами открывается захватывающий комикс (который, между прочим, можно поставить на автовоспроизведение), где задача главной героини – раздобыть секретные данные и уйти, не попав в неприятности. Для успешного выполнения операции она вынуждена переключаться между четырьмя различными режимами движения, которые имитируют технологию Peugeot Hybrid4 – максимальная производительность и динамичность (Sport), режим полного привода и максимальной тяги (4WD), баланс между производительностью и экономией (Auto), тихая работа (ZEV).

The Walking Dead

Итак, мы подошли к третьему месту в нашем списке ТОП-сайтов, которое досталось проекту The Walking Dead. При создании сайта, который в первую очередь заинтересовал многочисленных фанатов сериала «Ходячие мертвецы», использовались HTML5, CSS3, JavaScript и, конечно, параллакс-эффект. Разработчики проделали огромный труд, заставив работать все эти технологии вместе и на всех платформах. Попадая на сайт и начиная скроллить, пользователь видит рассказ-комикс о том, как из актеров делают зомби.



Уникальный и неповторимый проект, часть агитационной кампании Sony «Be Moved» впечатляет своей объемностью, динамикой и продуманностью до мельчайших деталей. Лучшей презентации продукции, чем у Sony, наверное, не сыскать. Слова излишни – просто скроллите вниз и наслаждайтесь!



Flat vs. Realism

И, наконец, мы дошли до первого места нашего рейтинга, которое занял сайт Flat vs. Realism – детище интерактивного агентства inTacto. Этот новогодний проект со зрелищной графикой (и музыкальным сопровождением!) представляет собой мини-игру жанра fighting с интересной предысторией, где происходит противостояние представителей двух видов дизайна – реалистичного и плоского. Сделав упор на главный холивар конца 2013 – начала 2014 года, создатели не прогадали: после выхода эта впечатляющая работа мгновенно вызвала фурор и стала популярным предметом обсуждения в блогах и новостях.

Разработчикам сайта удалось объединить параллакс-скроллинг и игру на HTML5. «Мы хотели сделать так, чтобы во время прокрутки сайта от начала до конца все действия происходили плавно и без задержек. Для этого мы применили AJAX, что позволило обновлять данные в фоновом режиме», – пояснил креативный директор агентства Alejandro Lazos. Проект был представлен зрителям в конце 2013, перед Новым годом. Приготовьтесь крутить скролл, вас ждет много увлекательного!



Примечание: к сожалению, со временем некоторые сайты могут изменить свой дизайн.

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

Но есть проблема - сделать параллакс без тормозов и дерганий может стать сложной задачей для начинающего (и не очень) веб-мастера.

В этой статье мы обсудим решения, которые имеют хорошую производительность, а это немало важно для красивого и информативного сайта или приложения.

Для начала давайте отметим несколько важных пунктов:

  • Не используйте события scroll либо background-position для создания параллакс анимации.
  • Используйте CSS 3D трансформации для создания более точного эффекта параллакса.
  • Для мобильного браузера Safari используйте position: sticky чтобы эффект параллакса гарантированно размножился.

Вы можете зайти в репозиторий Github – примеры UI элементов и вытащить от туда Parallax helper JS ! Вы можете посмотреть живое демо параллакс скролла в репозитории Github.

Проблемы параллакс эффекта

Для начала давайте рассмотрим 2 основных пути для достижения параллакс эффекта, и в частности почему они не подходят для наших целей.

Плохо: использование событий scroll

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

Во многих браузерах события прокрутки предоставляются низкого качества и нет гарантии доставки их к каждому кадру анимации прокрутки!

Этот кусок важной информации рассказывает нам почему нужно избегать решений на javascript, которые передвигают элементы, основанные на событиях прокрутки:

Javascript не гарантирует что параллакс будет успевать за прокруткой страницы. В старых версиях мобильного Safari события прокрутки на самом деле предоставлялись к концу прокрутки, что делало не возможным выполнение эффектов прокрутки, основанных на Javascript.

Большинство последних версий предоставляют события прокрутки во время анимации прокрутки, но по аналогии с Chrome, основаны на низком качестве. Если основной поток занят другими задачами, события прокрутки не будут доставлены немедленно, это означает что эффект параллакса будет утерян.

Плохо: обновление background-position

Другая ситуация, которую мы должны избежать это отрисовка каждого кадра. Многие решения пытаются изменить background-position обеспечить вид параллакса, что приводит к перерисовке испорченных частей страницы при прокрутке и это может привести к ненужной анимации.

Если мы хотим выполнить обещанное параллакс перемещение, нам необходимо что-то такое, что может быть применено в качестве ускорителя (что на сегодняшний день означает придерживаться transforms и opacity), и которое не полагается на события scroll.

3D в CSS

Scott Kellum и Keith Clark провели значительную работу в области использования CSS 3D для достижения параллакс перемещения. Они эффективно используют следующий технический прием:

  • Установить scroll для содержимого элемента с overflow-y: scroll (и вероятно overflow-x: hidden).
  • К тому же элементу добавить значение perspective , и для perspective-origin установить top left или 0 0 .
  • Потомкам того элемента применить сдвиг по оси Z, и масштабировать резервную копию таким образом, чтобы параллакс движение не затрагивало их размер на экране.

CSS для такого подхода выглядит так:

css Настройка масштаба для perspective

Сдвиг дочернего элемента назад может стать причиной уменьшения пропорционально значению perspective. Вы можете рассчитать до какого значения масштабировать с помощью следующего уравнения: (perspective - distance) / perspective . Так как мы скорее всего хотим сместить элемент, но при появлении его в том размере, в котором мы ему указали, его необходимо масштабировать таким образом, чтобы не сдвинуть его в лево.

В нашем случае в коде выше perspective равен 1 px, Z дистанция parallax-child равна -2px. Это означает, что элемент нужно 3х кратно увеличить, в коде вы можете наблюдать это как следующую запись scale(3).

Для любого контента, у которого не будет задана величина translateZ Вы можете заменить ее на 0. Это значит масштаб будет (perspective - 0) / perspective, что даются сетку из 1 значения, что значит невозможность ни увеличить ни уменьшить масштаб. Реально удобно.

Как работает данный подход

Важно чтобы было ясно почему это работает, поскольку мы будем использовать эти знания в ближайшее время. Скроллинг это фактически transform, именно поэтому он может быть ускорен; это в основном включается себя смещение слоев вокруг с помощью GPU. В типичной прокрутке, которая не имеет представление о perspective, прокрутка происходит в соотношении 1 к 1 когда сравнивают прикручиваемые элементы и их потомки. Если прокрутить элементы на 300 px вниз, то предки трансформируются на верх на те же 300 px.

Однако применение значения perspective к прокручиваемым элементам вносит путаницу с этим процессом; это меняет матрицу, которая лежит в основе преобразование скролла. Сейчас прокрутка на 300px может сдвинуть потомка на 150px, в зависимости от того какие Вы выбрали значения perspective и translateZ. Если какой-то элемент имеет значение translateZ равным 0 он будет прокручиваться в масштабе 1 к 1(как раньше), но потомок оттолкнутый по оси Z от начального perspective будет скролится с другой скоростью. Чистый результат: параллакс перемещение. И что немало важно, это регулировка происходит внутренним механизмом браузеров автоматически, что значит отсутствие необходимости прислушиваться к событиям scroll или менять background-position.

Ложка дегтя в бочке меда: мобильный Safari

Есть много предостережений к каждому эффекту, и один из важным для transforms это сохранение 3D эффектов для потомков. Если есть элементы в иерархии, между элементом и его параллакс потомком, 3D perspective имеет значение “flattened”, что означает эффект потерян.

html

Однако в случае мобильного Safari все немного запутаннее. Применение overflow-y: scroll к элементу контейнера технически работает, но за счёт швыряния прокручиваемых элементов. Решением будет добавить -webkit-overflow-scrolling: touch , но он также сгладит perspective и мы не получим никакого параллакса.

С прогрессивной точки зрения, это не такая уж большая проблема. Если мы не сможем добиться параллакса в любой ситуации наше приложение все равно будет работать, но неплохо было бы выяснить обходной путь.

В помощь position: sticky!

Существует, на самом деле, некоторая помощь в виде position: sticky, это нужно чтобы элементы “придерживались” к верху от viewport либо учитывали родительский элемент в время прокрутки. Спецификация, как и многие из них, довольно большая, но она содержит в себе маленькую полезную жемчужину:

Блок с позиционированием stick позиционируется аналогично блоку с позиционированием relative, но смещение вычисляется с ссылкой на ближайшего предка с ползунком прокрутки или viewport если нет предка с ползунком прокрутки. - CSS Positioned Layout Module Level 3.

Это может показаться не таким уж значимым на первый взгляд, но ключевой момент в том выражении в том, как вычисляется параметр элемента stick: “смещение вычисляется с ссылкой на ближайшего предка с ползунком прокрутки”. Другими словами, расстояние движения элементов со значением stick (для того чтобы казаться прикрепленным к другому элементу или к видимой части экрана) высчитывается до применения каких-либо других трансформаций, а не после. Это значит, очень похоже на пример приведенный ранее, если смещение было рассчитано на 300px, это новая возможность использования значений perspective (или иного transform) для того чтобы влиять на значение перемещения на 300px до того как оно будет применено к любому элементу со значением stick.

Применяя position: -webkit-sticky для элемента с параллаксом мы можем фактически получить “обратное” эффекту от -webkit-overflow-scrolling: touch. Это гарантирует, что элемент с параллаксом ссылается на ближайшего предка с ползунком прокрутки, в данном случае это.container . Далее также как и до этого добавляем значение perspective к.parallax-container, которое изменяет рассчитанное перемещение скролла и создает эффект параллакса.

html

css

Container {

overflow-y : scroll;

Webkit-overflow-scrolling : touch;

Parallax-container {

perspective : 1px ;

Parallax-child {

position : -webkit-sticky;

top : 0px ;

transform : translate (-2px) scale (3);

Это восстанавливает эффект параллакса для мобильного Safari, что является отличной новостью для всех!

Предостережения для позиционирования sticky

Тем не менее тут есть различие: position: sticky изменяет механизм параллакса. Позиционирование sticky пытается, полностью, приклеить элемент к прокручиваемому контейнеру, в то время как версия без sticky этого не делает.

  • С position: sticky , чем ближе элемент к z = 0 тем меньше он двигается.
  • Без position: sticky , чем ближе элемент к z = 0 тем больше он двигается.

Если все это кажется немного абстрактным, Посмотрите демо от Роберта Флака, которое демонстрирует разницу в поведении элементов с позиционированием sticky и без. Чтобы видеть разницу Вам нужен Chrome Canary (версия 58 на момент написания статьи) или Safari.

Демо Роберта Флака показывает как position: sticky влияет на параллакс прокручивание.

Разные ошибки и способы их устранения

Как всегда есть бугорки и неровности, которые нужно сгладить:

  • Поддержка sticky противоречива. Поддержка реализована в Chrome, Edge не поддерживает полностью, а FireFox имеет баги отрисовки при совместном использовании sticky и transforms: perspective. В таких случаях стоит добавить небольшой код только лишь для того чтобы подключить position: sticky (с префиксом -webkit-) когда это необходимо, это нужно только для мобильного Safari.
  • Данный эффект совсем не работает в Edge . Edge пытается обработать прокручивание на уровне ОС, что в общем хорошая вещь, но в данном случае это препятствует обнаружения перспективных изменений во время прокрутки. Чтобы исправить это Вы можете добавить элемент с позиционированием fixed, как это выглядит в переходе Edge к методу обработки без ОС, что гарантирует учет перспективных изменений.
  • Контент страницы просто огромен! Многие браузеры не берут в расчет масштаб при решении на сколько большой контент страницы, но к сожалению Chrome и Safari не учитывают перспективы. Поэтому если скажем применить масштаб 3Х к элементу, мы можем увидеть полосы прокрутки и тому подобное, даже при масштабе 1Х после применения perspective. Есть возможность обойти эту проблему масштабируя элементы относительно правого нижнего угла (transform-origin: bottom right). Это работает благодаря тому, что негабаритные элементы перерастут в “отрицательные области” (обычно с права с верху) относительно прокуриваемой области; Прокручиваемые области никогда не покажут либо не прокрутят контент до отрицательной области.
Заключение

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

Оригинал: https://developers.google.com/web/updates/2016/12/performant-parallaxing



Загрузка...