Как создать сплитскрин слайдер при помощи JavaScript
Russian (Pусский) translation by Alex Bogdanov (you can also view the original English article)
Сегодня в видеоруководстве я покажу вам как создать "сплитскрин" слайдер, используя JavaScript. Вдохновением послужила страница с Corsair website; давайте посмотрим, как мы можем создать свой собственный слайдер.
Что мы будем делать
Давайте посмотрим на демо того, что мы будем делать. Посмотрите на проект на CodePen, либо скачайте исходники с GitHub.
Посмотрите видео

1. Создаем панели
Как это сделать? Создайте две отдельные панели в вашем HTML. Я использовал div
элемент с классом panel
. У первой панели задал также класс bottom
, у другой – top
. В каждой панели также есть еще один div
для контента.
1 |
<div class="splitview"> |
2 |
<div class="panel bottom"> |
3 |
<div class="content"> |
4 |
|
5 |
</div>
|
6 |
</div>
|
7 |
<div class="panel top"> |
8 |
<div class="content"> |
9 |
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
Поместите ваш контент (изображения, заголовки и т.д.) в div с классом content
.
Как только сделаете, добавьте еще один div
в качестве переключателя перед закрывающим тегом splitview
.
1 |
<div class="handle"></div> |
2. Добавьте стилей для расположения панелей
Первыми важными стилями будут те, которые разместят наши панели одну над другой, а также сделают их подвижными.
1 |
/* Panels. */
|
2 |
.splitview { |
3 |
position: relative; |
4 |
width: 100%; |
5 |
min-height: 45vw; |
6 |
overflow: hidden; |
7 |
}
|
8 |
|
9 |
.panel { |
10 |
position: absolute; |
11 |
width: 100vw; |
12 |
min-height: 45vw; |
13 |
overflow: hidden; |
14 |
}
|
Задайте стили каждой панели отдельно – для top
и bottom
, например задав background-color
и украсьте их внутри как захотите. Стоит только помнить о z-index, чтобы расположить их в правильном порядке.
1 |
.bottom { |
2 |
background-color: rgb(44, 44, 44); |
3 |
z-index: 1; |
4 |
}
|
5 |
|
6 |
.top { |
7 |
background-color: rgb(77, 69, 173); |
8 |
z-index: 2; |
9 |
}
|
3. Примените простую маску
Теперь наша верхняя панель полностью перекрывает нижнюю, так что давайте поэкспериментируем с шириной:
1 |
.top { |
2 |
background-color: rgb(77, 69, 173); |
3 |
z-index: 2; |
4 |
width: 50vw; |
5 |
}
|
У вас должно получиться что-то похожее верхняя панель будет достигать не более половины (50vw
) страницы:



4. Подключаем JavaScript
Теперь, когда все работает в нашем CSS, давайте займемся JavaScript и посмотрим, как мы сможем анимировать наш слайдер. Начнем с запуска функции только при полной загрузке DOM.
1 |
document.addEventListener('DOMContentLoaded', function() { |
2 |
|
3 |
});
|
Весь остальной код будет находиться внутри этой функции, внутри скобок.
Затем обозначим переменные, указав родительский элемент, верхнюю панель (она единственная у нас будет изменяться) и элемент, который будет происходить смена.
1 |
var parent = document.querySelector('.splitview'), |
2 |
topPanel = parent.querySelector('.top'), |
3 |
handle = parent.querySelector('.handle'), |
5. Делаем переключатель
Прежде чем приступить, давайте зададим стили переключателю.
1 |
/* Handle. */
|
2 |
.handle { |
3 |
height: 100%; |
4 |
position: absolute; |
5 |
display: block; |
6 |
background-color: rgb(253, 171, 0); |
7 |
width: 5px; |
8 |
top: 0; |
9 |
left: 50%; |
10 |
z-index: 3; |
11 |
}
|
Это небольшой блок в 5pxпомещенный в середину видимой области. Его z-index
– 3, убедитесь, что он находится на самом верху.
Заставляем его перемещаться
Мы хотим заполучить координаты курсора мыши по оси x, когда она перемещается внутри контейнера. Затем мы хотим, чтобы переключатель перемещался и задавал ширину верхней панели сообразно этим координатам.
Начнем с приемника событий на родительском элементе, затем установим свойство left
нашего переключателя равным значению event.clientX
.
1 |
parent.addEventListener('mousemove', function(event) { |
2 |
// Move the handle.
|
3 |
handle.style.left = event.clientX + 'px'; |
4 |
});
|
Этот код позаботится о перемещении переключателя, теперь давайте займемся размерами панели, приравняв их к event. clientX
.
1 |
parent.addEventListener('mousemove', function(event) { |
2 |
// Move the handle.
|
3 |
handle.style.left = event.clientX + 'px'; |
4 |
|
5 |
// Adjust the top panel width.
|
6 |
topPanel.style.width = event.clientX + 'px'; |
7 |
});
|
Готово!
Мы подошли к концу; при помощи такого простого CSS и JavaScript мы создали прекрасный эффект сплитскрин слайдера. Чтобы сделать все еще лучше, чем я занимаюсь в видео, мы можем изменить и сам переключатель – взгляните на демо на CodePen!