From 9f82dd214c48cf30ac35e4bf9e9af4284ab29223 Mon Sep 17 00:00:00 2001 From: Chuck Dries Date: Tue, 14 Feb 2017 04:22:22 -0700 Subject: [PATCH] Fixed infinite loop on large displays --- scroll.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scroll.js b/scroll.js index 4177a1a..1285a85 100644 --- a/scroll.js +++ b/scroll.js @@ -4,6 +4,7 @@ var speed = .0005; //speed multiplier //setup necissary stuff var target = null; var targetHeight = null; +var prevHeight = null; var currentHeight = null; var startTime = null; var count = 0; @@ -12,6 +13,7 @@ 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 = null; //we have to reset the start time every time the animation runs if(currentHeight != targetHeight){ count = 0; @@ -22,12 +24,12 @@ 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 window.scroll(0, currentHeight + deltaScroll); //scroll! currentHeight = getScrollY();//re-record the current height after scrolling for comparison - count++; - if((currentHeight != targetHeight) || ((currentHeight + offsetScroll < window.innerHeight)&& count < 50)){ //schedule another tick until we get where we're going or we get as far as we can + if((currentHeight != targetHeight) && (currentHeight != prevHeight)){ //schedule another tick until we get where we're going or we get as far as we can window.requestAnimationFrame(animateScroll); }