Миникарта страницы — это инструмент, позволяющий визуально отслеживать прогресс пользователя при прокрутке. В контексте библиотеки ScrollMagic она реализуется через сцены (Scenes) и контроллеры (Controllers), которые синхронизируют анимации с прокруткой страницы.
Для работы с ScrollMagic требуется создать контроллер:
var controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 'onEnter',
duration: '100%'
}
});
'onEnter', 'onLeave' или числа от
0 до 1 задают положение триггера относительно
окна.Контроллер отслеживает все сцены на странице и управляет их состоянием, обеспечивая корректное воспроизведение анимаций при прокрутке.
Миникарта реализуется как вертикальный индикатор прогресса. Для её работы необходимо:
<div id="minimap">
<div id="progress"></div>
</div>
#minimap {
position: fixed;
top: 0;
right: 10px;
width: 5px;
height: 100%;
background: rgba(0,0,0,0.1);
}
#progress {
width: 100%;
height: 0;
background: #3498db;
}
Для динамического обновления прогресса создаётся сцена:
var scene = new ScrollMagic.Scene({
triggerElement: "body",
duration: document.body.scrollHeight - window.innerHeight
})
.on("progress", function(e) {
var progressHeight = e.progress * 100;
document.getElementById("progress").style.height = progressHeight + "%";
})
.addTo(controller);
0 до
1, отображающее текущий процент прокрутки сцены.Если страница разделена на секции, можно создать отдельные сцены для каждой секции, чтобы миникарта отражала их завершение:
var sections = document.querySelectorAll("section");
sections.forEach(function(section, index) {
new ScrollMagic.Scene({
triggerElement: section,
duration: section.offsetHeight
})
.on("progress", function(e) {
var progressHeight = ((index + e.progress) / sections.length) * 100;
document.getElementById("progress").style.height = progressHeight + "%";
})
.addTo(controller);
});
Для большей визуальной наглядности можно использовать изменение цвета по мере прокрутки:
scene.on("progress", function(e) {
var progress = e.progress;
var color = `rgb(${Math.floor(progress*255)}, 50, 200)`;
document.getElementById("progress").style.backgroundColor = color;
});
Чтобы миникарта оставалась на месте при прокрутке:
new ScrollMagic.Scene({
triggerElement: "#minimap",
triggerHook: 0,
duration: document.body.scrollHeight
})
.setPin("#minimap")
.addTo(controller);
requestAnimationFrame внутри обработчика
progress для плавной анимации.Можно добавить к миникарте кликабельные зоны для навигации:
document.querySelectorAll("#minimap div").forEach(function(marker, index){
marker.addEventListener("click", function(){
window.scrollTo({
top: sections[index].offsetTop,
beh * avior: "smooth"
});
});
});
Миникарта в ScrollMagic позволяет не только визуализировать прогресс, но и интегрировать интерактивные элементы, анимацию и цветовые переходы, создавая динамический и информативный интерфейс.