2016-09-25 2 views
0

У меня есть функция плавной прокрутки, которая отлично работает в Chrome и Safari, но не будет играть в мяч в Firefox, потому что она звонит document.body.scrollTop.JavaScript только плавная прокрутка по обозревателям

function smoothScroll(body, destination, duration) { 
    duration = (typeof duration != "undefined") 
    ? duration 
    : 500; 
    if (duration <= 0) return; 
    var difference = destination - body.scrollTop; 
    var perTick = difference/duration * 10; 
    setTimeout(function() { 
    body.scrollTop = body.scrollTop + perTick; 
    if (body.scrollTop === destination) { 
     showAndHideNav("hide"); 
     return; 
    } 
    smoothScroll(body, destination, duration - 10); 
    }, 10); 
} 

function findDestination(element) { 
    var value = element.getAttribute("value"), 
    destination = document.getElementById(value).offsetTop; 
    return destination; 
} 

smoothScroll(document.body, findDestination(element)); 

Я попытался заменить scrollTop с pageYOffset, который определяет правильные местоположения, но не прокручивать в этих местах.

Может ли кто-нибудь порекомендовать более дружественную браузеру альтернативу scrollTop, которая позволит плавно прокручивать браузеры?

Благодарим за помощь!

+0

Try 'окно .scrollTop'. [SO] (http://stackoverflow.com/a/17776759/1086525) – Whothehellisthat

ответ

3

Вместо использования body.scrollTop непосредственно, попробуйте следующую вспомогательную функцию, используемую как так: getScrollTop(window)

function getScrollTop(scrollable) { 
    return scrollable.scrollTop || document.body.scrollTop || document.documentElement.scrollTop; 
} 

Чтобы на самом деле прокрутки к цели, попробуйте этот перекрестный метод браузера:

window.scrollTo(0, getScrollTop(window) + perTick); 
+0

document.documentElement.scrollTop; работает для firefox, метод jedifans должен работать. –

+0

@jedifans Это прекрасно работает (и так лаконично). Спасибо! – dedaumiersmith

Смежные вопросы