MediaWiki:Common.js: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 69: Рядок 69:
     }
     }


    function scrollToTarget(target) {
  function scrollToTarget(target) {
         var top = getTargetTop(target);
         var attempts = 0;
        if (top === null) return;


         isAnimating = true;
         function step() {
        $('html, body').stop(true, false).animate({ scrollTop: Math.max(0, top) }, 280, function () {
             var top = getTargetTop(target);
            // Перевірка після анімації: якщо layout зсунувся — доводимо
             if (top === null) { isAnimating = false; return; }
             var corrected = getTargetTop(target);
 
             if (corrected !== null && Math.abs(corrected - window.pageYOffset) > 4) {
            var diff = Math.abs(top - window.pageYOffset);
                 $('html, body').stop(true, false).animate(
 
                    { scrollTop: Math.max(0, corrected) }, 120,
            // Уже на місці
                    function () { isAnimating = false; }
            if (diff <= 3) { isAnimating = false; return; }
                );
 
            } else {
            // Захист від нескінченного циклу
            if (attempts >= 4) {
                 window.scrollTo(0, Math.max(0, top));
                 isAnimating = false;
                 isAnimating = false;
                return;
             }
             }
         });
 
            attempts++;
            var duration = (attempts === 1) ? 280 : 90;
 
            $('html, body').stop(true, false).animate(
                { scrollTop: Math.max(0, top) },
                duration,
                function () {
                    // Даємо layout усістися, потім перевіряємо ще раз
                    setTimeout(step, 30);
                }
            );
         }
 
        isAnimating = true;
        step();
     }
     }