6395
редагувань
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 69: | Рядок 69: | ||
} | } | ||
function scrollToTarget(target) { | |||
var | var attempts = 0; | ||
function step() { | |||
var top = getTargetTop(target); | |||
if (top === null) { isAnimating = false; return; } | |||
var | |||
if ( | var diff = Math.abs(top - window.pageYOffset); | ||
// Уже на місці | |||
if (diff <= 3) { isAnimating = false; return; } | |||
// Захист від нескінченного циклу | |||
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(); | |||
} | } | ||