From a7d3079442c9bedd96316043af0633da5be90054 Mon Sep 17 00:00:00 2001 From: Daniel Johnson Date: Tue, 26 Aug 2014 12:10:20 -0400 Subject: [PATCH 1/3] Adding a new parameter: _precision. --- src/skrollr.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/skrollr.js b/src/skrollr.js index 2ff15f36..17d90bcb 100644 --- a/src/skrollr.js +++ b/src/skrollr.js @@ -240,6 +240,8 @@ easings[e] = options.easing[e]; } } + + _precision = parseInt(options.precision, 10) || 10; _edgeStrategy = options.edgeStrategy || 'set'; @@ -684,6 +686,7 @@ _smoothScrolling = undefined; _forceRender = undefined; _skrollableIdCounter = 0; + _precision = undefined; _edgeStrategy = undefined; _isMobile = false; _mobileOffset = 0; @@ -1313,7 +1316,7 @@ for(; valueIndex < val1Length; valueIndex++) { //That's the line where the two numbers are actually interpolated. - interpolated[valueIndex] = val1[valueIndex] + ((val2[valueIndex] - val1[valueIndex]) * progress); + interpolated[valueIndex] = (val1[valueIndex] + ((val2[valueIndex] - val1[valueIndex]) * progress)).toFixed(_precision); } return interpolated; @@ -1739,6 +1742,8 @@ //The ID is the index in the _skrollables array. var _skrollableIdCounter = 0; + var _precision; + var _edgeStrategy; From f87e2179a7f4883945510d6d560ad1c2edce970f Mon Sep 17 00:00:00 2001 From: Daniel Johnson Date: Tue, 26 Aug 2014 15:42:03 -0400 Subject: [PATCH 2/3] Adding per-element precision via data-precision --- src/skrollr.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/skrollr.js b/src/skrollr.js index 17d90bcb..f5490ee1 100644 --- a/src/skrollr.js +++ b/src/skrollr.js @@ -358,6 +358,9 @@ //If this particular element should emit keyframe events. var emitEvents = false; + //The interpolation precision for this particular element. + var precision = _precision; + //If we're reseting the counter, remove any old element ids that may be hanging around. if(ignoreID && SKROLLABLE_ID_DOM_PROPERTY in el) { delete el[SKROLLABLE_ID_DOM_PROPERTY]; @@ -405,6 +408,13 @@ continue; } + //Global precision can be overwritten by the element attribute. + if(attr.name === 'data-precision') { + precision = parseInt(attr.value, 10); + + continue; + } + var match = attr.name.match(rxKeyframeAttribute); if(match === null) { @@ -495,6 +505,7 @@ smoothScrolling: smoothScrollThis, edgeStrategy: edgeStrategy, emitEvents: emitEvents, + precision: precision, lastFrameIndex: -1 }; @@ -1022,7 +1033,7 @@ progress = left.props[key].easing(progress); //Interpolate between the two values - value = _calcInterpolation(left.props[key].value, right.props[key].value, progress); + value = _calcInterpolation(left.props[key].value, right.props[key].value, progress, skrollable.precision); value = _interpolateString(value); @@ -1300,7 +1311,7 @@ /** * Calculates the new values for two given values array. */ - var _calcInterpolation = function(val1, val2, progress) { + var _calcInterpolation = function(val1, val2, progress, precision) { var valueIndex; var val1Length = val1.length; @@ -1316,7 +1327,7 @@ for(; valueIndex < val1Length; valueIndex++) { //That's the line where the two numbers are actually interpolated. - interpolated[valueIndex] = (val1[valueIndex] + ((val2[valueIndex] - val1[valueIndex]) * progress)).toFixed(_precision); + interpolated[valueIndex] = (val1[valueIndex] + ((val2[valueIndex] - val1[valueIndex]) * progress)).toFixed(precision); } return interpolated; From d65a20716dc9f1836813bd1f48448d292c486b7d Mon Sep 17 00:00:00 2001 From: Daniel Johnson Date: Wed, 27 Aug 2014 11:18:16 -0400 Subject: [PATCH 3/3] Removed trailing whitespace to fix Travis build failure --- src/skrollr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skrollr.js b/src/skrollr.js index f5490ee1..78b9f994 100644 --- a/src/skrollr.js +++ b/src/skrollr.js @@ -240,7 +240,7 @@ easings[e] = options.easing[e]; } } - + _precision = parseInt(options.precision, 10) || 10; _edgeStrategy = options.edgeStrategy || 'set';