Pro
Setup
Info
Info
Включено в подписку
Настройки
[
Написать в поддержку
Telegram: @sonneto_support
Кастомизация
]
Setup
Info
Info
<!-- Контейнер слайдера до/после -->
<div class="sonneto-ba-containerslider">
<div class="sonneto-ba-sliderslider" id="sonneto-BAslider">

<!-- Левая часть (до) -->
<div class="sonneto-Ba-beforeslider">
<img src="https://static.tildacdn.com/tild3161-3539-4162-b065-373565653836/danielhansen330776.jpg" alt="">
<!-- ↑ Изменяем изображение "до" -->
</div>

<!-- Правая часть (после) -->
<div class="sonneto-Ba-after">
<img src="https://static.tildacdn.com/tild3666-3334-4239-a631-353537373362/isairamos128262.jpg" alt="">
<!-- ↑ Изменяем изображение "после" -->
</div>

<!-- Ползунок -->
<div class="sonneto-ba-changeslider">
<div class="slider-rectangle"></div>
<!-- ↑ Прямоугольник на ползунке (ширина, высота, цвет) -->
</div>

</div>
</div>

<style>
/* Контейнер слайдера */
.sonneto-ba-containerslider {
width: 100%; /* Ширина слайдера */
height: 100%; /* Высота слайдера */
margin: 0 auto;
position: relative;
overflow: hidden;
user-select: none;
}

/* Слайдер */
.sonneto-ba-sliderslider {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;

border-radius: 10px; /* Скругление углов слайдера */
}

/* Левая и правая части */
.sonneto-Ba-beforeslider,
.sonneto-Ba-after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}

.sonneto-Ba-beforeslider img,
.sonneto-Ba-after img {
width: 100%;
height: 100%;
object-fit: cover; /* сохраняем пропорции */
}

/* Начальная обрезка картинок */
.sonneto-Ba-beforeslider {
z-index: 2;
clip-path: inset(0 50% 0 0); /* начальная позиция ползунка */
}

.sonneto-Ba-after {
z-index: 1;
clip-path: inset(0 0 0 50%);
}

/* Ползунок */
.sonneto-ba-changeslider {
position: absolute;
left: 50%; /* начальная позиция ползунка */
top: 0;
z-index: 10;
width: 2px; /* толщина линии */
height: 100%;
background-color: #09090b; /* цвет линии */
cursor: col-resize;
}

/* Стрелки на ползунке */
.sonneto-ba-changeslider::before,
.sonneto-ba-changeslider::after {
content: "";
position: absolute;
top: 50%;
width: 0;
height: 0;
border-style: solid;
border-width: 8px 6px 8px 6px; /* размер стрелок */
transform: translateY(-50%);
}

.sonneto-ba-changeslider::before {
left: -20px;
border-color: transparent #09090b transparent transparent; /* цвет стрелки */
}

.sonneto-ba-changeslider::after {
right: -20px;
border-color: transparent transparent transparent #09090b; /* цвет стрелки */
}

/* Прямоугольник на ползунке */
.sonneto-ba-changeslider .slider-rectangle {
position: absolute;
left: 50%;
top: 50%;
width: 8px; /* ширина */
height: 35px; /* высота */
background-color: #09090b; /* цвет */
transform: translate(-50%, -50%);
}
</style>

<script>
document.addEventListener('DOMContentLoaded', () => {
const container = document.querySelector('.sonneto-ba-containerslider');
const beforeSlider = container.querySelector('.sonneto-Ba-beforeslider');
const afterSlider = container.querySelector('.sonneto-Ba-after');
const slider = container.querySelector('.sonneto-ba-sliderslider');
const handle = container.querySelector('.sonneto-ba-changeslider');

let isActive = false;

// Обновляем размеры изображений при изменении окна
function updateImageSize() {
const width = container.offsetWidth;
const height = container.offsetHeight;
beforeSlider.querySelector('img').style.width = `${width}px`;
beforeSlider.querySelector('img').style.height = `${height}px`;
afterSlider.querySelector('img').style.width = `${width}px`;
afterSlider.querySelector('img').style.height = `${height}px`;
}

// Обновление клип-пути (разделение картинок)
function updateClipPath(x) {
const rect = slider.getBoundingClientRect();
let percentage = ((x - rect.left) / rect.width) * 100;
percentage = Math.max(0, Math.min(100, percentage));
beforeSlider.style.clipPath = `inset(0 ${100 - percentage}% 0 0)`;
afterSlider.style.clipPath = `inset(0 0 0 ${percentage}%)`;
handle.style.left = `${percentage}%`;


}

// Перемещение ползунка
function moveSlider(e) {
if (!isActive) return;
const x = e.touches ? e.touches[0].clientX : e.clientX;
updateClipPath(x);
}

// Инициализация слайдера
function initSlider() {
updateImageSize();
window.addEventListener('resize', updateImageSize);

handle.addEventListener('mousedown', () => { isActive = true; });
document.addEventListener('mouseup', () => { isActive = false; });
document.addEventListener('mousemove', moveSlider);

handle.addEventListener('touchstart', () => { isActive = true; });
document.addEventListener('touchend', () => { isActive = false; });
document.addEventListener('touchmove', moveSlider);
}

initSlider();
});
</script>
Настройки модификации

  • Открываем Zero Block и заходим в режим редактирования.

  • Размещаем в нём HTML элемент и присваиваем ему собственный класс: sonnnet-slider

  • Далее добавляем блок T123 и вставляем в него подготовленный код.

  • Далее размещаем блок GL02 в вставляем в него две картинки одинакового размера

  • Копируем ссылки на картинки и вставляем их в код согласно пометкам.

  • Делаем в коде дополнительные настройки слайдера и ползунка.

Модификатор добавляет интерактивный слайдер для сравнения изображений.

Слайдер ДО / ПОСЛЕ в Zero Block

Теги

Модификация

#

CSS

#

Текст

#

Слайдеры

#
не доступно
id:
Скопировано!
Скопировать код
Подключение скриптов
Базовые настройки
  • Для корректной работы слайдера используется переменная slider как контейнер

  • Ползунок управляется через переменную handle и перемещается мышью или тачем

  • Левая и правая картинки обрезаются с помощью CSS clip-path (beforeImg и afterImg) для эффекта “до/после”

  • Размер изображений автоматически подстраивается под размеры контейнера при загрузке и изменении окна

  • Цвет линии ползунка, его ширину и радиус скругления можно менять через CSS у элемента handle

  • Цвет и толщина обводки слайдера задаются через CSS у контейнера slider
Технические советы
  • В Firefox и Safari возможны отличия в отображении скроллбара — лучше проверять результат в нескольких браузерах.

  • Если текст очень длинный, оптимально задать разумное значение max-height, чтобы не перегружать страницу.

  • На мобильных устройствах рекомендуется уменьшать высоту блока для удобства чтения.

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

Для корректной работы модификации необходимо, чтобы на странице была подключена библиотека jQuery, так как скрипт использует $(document).ready() и .each().

Информация о кастомизации кода доступна только в веб-версии сайта.

Сделать это можно в разделе: Настройки сайта - Ещё - Подключить jQuery на страницах сайта.
В Zero Block скрипты рекомендуется вставлять только после полной загрузки контента страницы, чтобы все элементы блока были доступны для обработки.
Текст скопирован в буфер обмена!
Текст скопирован в буфер обмена!