Создавая что-то в Red Antler, мы, как правило, придерживаемся принципа «меньше значит больше». Я большой поклонник Vanilla JS и еще больший поклонник того, чтобы CSS выполнял как можно больше тяжелой работы. Поэтому, подходя к ситуациям с параллаксом, я всегда стараюсь использовать самый простой подход с точки зрения «что нам действительно нужно делать?»

Раньше я был поклонником таких вещей, как skrollr, но не видел необходимости добавлять всю библиотеку. Я нашел несколько ванильных подходов, но, опять же, всегда происходило гораздо больше, чем нам было нужно. Чтобы построить параллакс в Olapic, мне потребовалось всего 2 вещи: элемент DOM для перемещения и установить, насколько я хочу сместить этот элемент на основе прокрутки. Я не большой поклонник чрезмерного прокрутки, поэтому я никогда не забираю всю страницу, вместо этого мне нравится контролировать положение прокрутки как можно более пассивно.

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

В приведенном выше коде у нас есть init (), который принимает элемент DOM, а также значение смещения, которое мы затем применяем преобразование css через javascript el.style.transform .

Что касается того, как мы вызываем Parallax.init (), вы можете использовать его как угодно. В моем конкретном случае особого регулирования не потребовалось, потому что он был достаточно эффективным с тем, как я с ним справлялся. В противном случае я мог бы порекомендовать добавить небольшую задержку, чтобы не перерисовывать чрезмерно. Даже с такой небольшой задержкой, как задержка в 1–200 мс, повторная отрисовка может значительно повлиять на производительность.

Функция handleScrolling содержит все наши вызовы Parallax.init ():

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

В качестве дополнительного бонуса вы можете добавить легкости анимируемым элементам (в CSS):

Наслаждаться.

А для рабочего примера перейдите на Olapic. Приведенный выше код - это то, что обеспечивает параллакс на главной странице.

Я сделал для этого небольшой пакет npm и буду вносить в него изменения, не стесняйтесь открывать проблемы / задавать вопросы здесь:

Https://github.com/the-couch/paralless