fix: прыжок автоскроллера теперь происходит в середине контента

- Вычисляется loopPoint как blockScrollWidth * floor(totalCopies/2)
- Прыжок происходит реже (в середине вместо начала)
- Переход стал менее заметным для пользователя
- Добавлено логирование loopPoint для отладки
This commit is contained in:
admin i 2025-12-05 11:11:09 +03:00
parent 17b256a627
commit 6ae6516db7

View File

@ -128,12 +128,17 @@ function initSingleScroller(wrapper, options = {}) {
// Вычисляем точную ширину блока после рендеринга
const blockScrollWidth = rail.scrollWidth / totalCopies;
// Точка прыжка - в середине всего контента (после половины копий)
// Это даст максимально плавный переход
const loopPoint = blockScrollWidth * Math.floor(totalCopies / 2);
let animationFrame = null;
let paused = false;
let resizeFrame = null;
console.log('initSingleScroller: scrollStep =', scrollStep, 'originalCount =', originalCount, 'totalCopies =', totalCopies);
console.log('initSingleScroller: blockScrollWidth =', blockScrollWidth, 'totalScrollWidth =', rail.scrollWidth);
console.log('initSingleScroller: loopPoint =', loopPoint, '(will jump back at this position)');
/**
* Один кадр анимации - плавный скролл.
@ -152,13 +157,13 @@ function initSingleScroller(wrapper, options = {}) {
// Максимальный scrollLeft (конец контента)
const maxScrollLeft = rail.scrollWidth - wrapper.clientWidth;
// Прыгаем когда прокрутили первый блок (оригиналы)
// Прыгаем в середине контента для максимально незаметного перехода
// ИЛИ когда достигли конца контейнера (защита от застревания)
if (wrapper.scrollLeft >= blockScrollWidth || wrapper.scrollLeft >= maxScrollLeft - 5) {
if (wrapper.scrollLeft >= loopPoint || wrapper.scrollLeft >= maxScrollLeft - 5) {
const oldScrollLeft = wrapper.scrollLeft;
wrapper.scrollLeft = 0;
accumulatedScroll = 0;
console.log('animate: SEAMLESS LOOP! jumped from', oldScrollLeft, 'to 0, blockScrollWidth =', blockScrollWidth, 'maxScrollLeft =', maxScrollLeft);
console.log('animate: SEAMLESS LOOP! jumped from', oldScrollLeft, 'to 0, loopPoint =', loopPoint, 'maxScrollLeft =', maxScrollLeft);
}
// Накапливаем дробные пиксели