NOW fixed bug that prevented smoothScroll from working

This commit is contained in:
Chuck Dries 2017-02-14 04:31:29 -07:00
parent 07fc92369c
commit b6b7a21c76

View File

@ -8,17 +8,17 @@ var prevHeight = null;
var currentHeight = null; var currentHeight = null;
var startTime = null; var startTime = null;
/* does some basic checking then calls animate() to do the heavy lifting */ /* does some basic checking then calls animate() to do the heavy lifting */
function smoothScroll(targetId){ function smoothScroll(targetId) {
target = document.getElementById(targetId);//grab the element target = document.getElementById(targetId);//grab the element
targetHeight = target.offsetTop; //get its height targetHeight = target.offsetTop; //get its height
currentHeight = getScrollY(); //grab the current scroll position currentHeight = getScrollY(); //grab the current scroll position
prevHeight = null; prevHeight = null;
startTime = performance.now(); //we have to reset the start time every time the animation runs startTime = null; //we have to reset the start time every time the animation runs
if(currentHeight != targetHeight){ if (currentHeight != targetHeight) {
window.requestAnimationFrame(animateScroll);//schedule the animation window.requestAnimationFrame(animateScroll);//schedule the animation
} }
} }
function animateScroll(timeStamp){ function animateScroll(timeStamp) {
if (startTime == null) startTime = timeStamp; //record the time the animation started if we're just starting if (startTime == null) startTime = timeStamp; //record the time the animation started if we're just starting
var deltaStep = (timeStamp - startTime) * speed; //timeStamp - startTime gives us miliseconds since the animation started, we scale this down because its usually in the hundreds. var deltaStep = (timeStamp - startTime) * speed; //timeStamp - startTime gives us miliseconds since the animation started, we scale this down because its usually in the hundreds.
currentHeight = getScrollY(); //record the current scroll position of the window currentHeight = getScrollY(); //record the current scroll position of the window
@ -27,7 +27,7 @@ function animateScroll(timeStamp){
var deltaScroll = deltaStep * offsetScroll; //decide how far to scroll this tick var deltaScroll = deltaStep * offsetScroll; //decide how far to scroll this tick
window.scroll(0, currentHeight + deltaScroll); //scroll! window.scroll(0, currentHeight + deltaScroll); //scroll!
currentHeight = getScrollY();//re-record the current height after scrolling for comparison currentHeight = getScrollY();//re-record the current height after scrolling for comparison
if((currentHeight != targetHeight) && (currentHeight != prevHeight)){ //schedule another tick until we get where we're going or we get as far as we can if ((currentHeight != targetHeight) && ((currentHeight != prevHeight) || (deltaStep == 0))) { //schedule another tick until we get where we're going or we get as far as we can. deltastep will always be 0 on the first frame.
window.requestAnimationFrame(animateScroll); window.requestAnimationFrame(animateScroll);
} }