From cb53f71ea7c5658c6f09ca8448fb28ad3dfaeb9e Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 9 Apr 2015 15:45:10 -0400 Subject: [PATCH 1/3] Moved configurable properties into unified object for easy override; --- src/jquery.smoothwheel.js | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/jquery.smoothwheel.js b/src/jquery.smoothwheel.js index 9624f4a..8dac5d5 100644 --- a/src/jquery.smoothwheel.js +++ b/src/jquery.smoothwheel.js @@ -8,23 +8,26 @@ */ (function ($) { - var self = this, container, running=false, currentY = 0, targetY = 0, oldY = 0, maxScrollTop= 0, minScrollTop, direction, onRenderCallback=null, - fricton = 0.95, // higher value for slower deceleration + var self = this, container, running=false, currentY = 0, targetY = 0, oldY = 0, maxScrollTop= 0, minScrollTop, direction, vy = 0, - stepAmt = 1, - minMovement= 0.1, ts=0.1; + var settings = { + friction: 0.95, // higher value for slower deceleration + stepAmt: 1, + minMovement: 0.1, + onRender: null, + }; var updateScrollTarget = function (amt) { targetY += amt; - vy += (targetY - oldY) * stepAmt; - + vy += (targetY - oldY) * settings.stepAmt; + oldY = targetY; } var render = function () { - if (vy < -(minMovement) || vy > minMovement) { + if (vy < -(settings.minMovement) || vy > settings.minMovement) { currentY = (currentY + vy); if (currentY > maxScrollTop) { @@ -33,17 +36,17 @@ vy = 0; currentY = minScrollTop; } - + container.scrollTop(-currentY); - vy *= fricton; - + vy *= settings.friction; + // vy += ts * (currentY-targetY); // scrollTopTweened += settings.tweenSpeed * (scrollTop - scrollTopTweened); // currentY += ts * (targetY - currentY); - if(onRenderCallback){ - onRenderCallback(); + if(settings.onRender){ + settings.onRender(); } } } @@ -56,7 +59,7 @@ var onWheel = function (e) { e.preventDefault(); var evt = e.originalEvent; - + var delta = evt.detail ? evt.detail * -1 : evt.wheelDelta / 40; var dir = delta < 0 ? -1 : 1; if (dir != direction) { @@ -66,7 +69,7 @@ //reset currentY in case non-wheel scroll has occurred (scrollbar drag, etc.) currentY = -container.scrollTop(); - + updateScrollTarget(delta); } @@ -81,9 +84,9 @@ window.msRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000 / 60); - }; - - + }; + + })(); /* @@ -130,11 +133,8 @@ //set target/old/current Y to match current scroll position to prevent jump to top of container targetY = oldY = container.get(0).scrollTop; currentY = -targetY; - + minScrollTop = container.get(0).clientHeight - container.get(0).scrollHeight; - if(options.onRender){ - onRenderCallback = options.onRender; - } if(options.remove){ log("122","smoothWheel","remove", ""); running=false; From 68c8547630ce6e0e42621f9592576c5cf081c7f9 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 9 Apr 2015 15:50:30 -0400 Subject: [PATCH 2/3] Override default configurable settings with user specified options; --- src/jquery.smoothwheel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/jquery.smoothwheel.js b/src/jquery.smoothwheel.js index 8dac5d5..22841a3 100644 --- a/src/jquery.smoothwheel.js +++ b/src/jquery.smoothwheel.js @@ -123,6 +123,7 @@ $.fn.smoothWheel = function () { // var args = [].splice.call(arguments, 0); var options = jQuery.extend({}, arguments[0]); + settings = jQuery.extend(settings,options); return this.each(function (index, elm) { if(!('ontouchstart' in window)){ From e28fcbe44adb207b6cc5bf093e28670c846d411a Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 10 Apr 2015 15:42:48 -0400 Subject: [PATCH 3/3] Added functionality to allow for elements that change height while scrolling; --- src/jquery.smoothwheel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/jquery.smoothwheel.js b/src/jquery.smoothwheel.js index 22841a3..34c643f 100644 --- a/src/jquery.smoothwheel.js +++ b/src/jquery.smoothwheel.js @@ -71,6 +71,10 @@ currentY = -container.scrollTop(); updateScrollTarget(delta); + + //add an additional height declaration to allow for elements that + //change height after initial page load. + minScrollTop = container.get(0).clientHeight - container.get(0).scrollHeight; } /*