From b6b7a21c76c9195fa73c569b14dd553c46942d85 Mon Sep 17 00:00:00 2001 From: Chuck Dries Date: Tue, 14 Feb 2017 04:31:29 -0700 Subject: [PATCH] NOW fixed bug that prevented smoothScroll from working --- scroll.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scroll.js b/scroll.js index 2d20e1c..1e74319 100644 --- a/scroll.js +++ b/scroll.js @@ -2,32 +2,32 @@ //settings var speed = .0005; //speed multiplier //setup necissary stuff -var target = null; +var target = null; var targetHeight = null; var prevHeight = null; var currentHeight = null; var startTime = null; /* 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 targetHeight = target.offsetTop; //get its height currentHeight = getScrollY(); //grab the current scroll position prevHeight = null; - startTime = performance.now(); //we have to reset the start time every time the animation runs - if(currentHeight != targetHeight){ + startTime = null; //we have to reset the start time every time the animation runs + if (currentHeight != targetHeight) { 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 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 prevHeight = currentHeight;//store height before scroll action so we can compare it to the height after we try to scroll var offsetScroll = targetHeight - currentHeight; //calculate how far we still need to go - 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! 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); }