Безплатно! Онлайн събитие: 5-дневно ChatGPT предизвикателство Регистрация тук.
Решение (Част 2): Интерактивен Scrollbar
Пълен достъп до курса: Не
За пълен достъп или безплатна проба (2 модула), моля влезте или се регистрирайте.
Плавен scroll и синхронизирана навигация – как работи всичко заедно
Най-важното в този урок е логиката зад smooth scroll ефекта и синхронизирането му с менюто. Вместо директно преместване към anchor, позицията се изчислява на стъпки, като всеки път се изминава 1/4 от оставащото разстояние, докато се достигне целта. Менюто се маркира при клик и се демаркира при ръчно скролиране. Допълнително се следи кои елементи са във видимата част на екрана, за да се стартират анимации.
Стъпка по стъпка: как е реализиран ефектът
- Инициализира се scrollbar и навигацията чрез публичен
initialize, който приема линковете и контейнера. - На всеки линк се добавя
clickлогика, която слуша заscrollсъбитие. - Запазва се началната scroll позиция (
scrollFrom) и крайната позиция на anchor (scrollTo). - Стартира се
setTimeout(40 ms), който извиква функция за плавно придвижване. - Изчислява се
scrollStep = (scrollTo - currentPosition) / 4. - Ако стойността стане твърде малка, се използва ±1, за да се гарантира достигане на целта.
- При достигане на крайната позиция менюто се демаркира при ново ръчно скролиране.
- Класът за анимации (singleton) следи
scroll,animationendиtransitionend, за да активира или рестартира анимации според видимостта на елементите.
Използвани ключови методи и събития
addEventListener– добавя слушатели заscroll,click,animationend,transitionend.setTimeout– изпълнява функция през интервал (40 ms) за плавен ефект.clearTimeout– предотвратява натрупване на таймери.scrollTop– задава текущата вертикална позиция на контейнера.classList.add()/classList.remove()– контролира CSS класове за стартиране на анимации.