Skip to content

Commit ab5dec3

Browse files
committed
move calculated offsets to testable function getParallaxOffsets
1 parent 6c1641a commit ab5dec3

File tree

2 files changed

+50
-24
lines changed

2 files changed

+50
-24
lines changed

src/libs/ParallaxScrollListener.js

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
2-
scaleBetween,
3-
testForPassiveScroll,
2+
getParallaxOffsets,
43
parseValueAndUnit,
4+
testForPassiveScroll,
55
} from '../utils/index';
66

77
(function(window, document) {
8-
8+
99
function ParallaxScrollListener() {
1010

1111
// All parallax elements to be updated
@@ -260,34 +260,16 @@ import {
260260

261261
// Scale percentMoved to min/max percent determined by offset props
262262
const { slowerScrollRate } = element.props;
263-
const {
264-
xUnit,
265-
yUnit,
266-
yMin,
267-
yMax,
268-
xMin,
269-
xMax,
270-
} = element.offsets;
271-
272-
// sets parallax to faster or slower than the rate of scroll
273-
let x = 0;
274-
let y = 0;
275263

276-
if (slowerScrollRate) {
277-
x = scaleBetween(percentMoved, xMin.value, xMax.value, 0, 100);
278-
y = scaleBetween(percentMoved, yMin.value, yMax.value, 0, 100);
279-
} else {
280-
// flipped max/min
281-
x = scaleBetween(percentMoved, xMax.value, xMin.value, 0, 100);
282-
y = scaleBetween(percentMoved, yMax.value, yMin.value, 0, 100);
283-
}
264+
// Get the parallax X and Y offsets
265+
const offsets = getParallaxOffsets(element.offsets, percentMoved, slowerScrollRate);
284266

285267
// Apply styles
286268
const el = element._inner;
287269
el.style.cssText =
288270
`will-change:transform;
289271
position:relative;
290-
transform:translate3d(${x}${xUnit}, ${y}${yUnit}, 0)`;
272+
transform:translate3d(${offsets.x.value}${offsets.x.unit}, ${offsets.y.value}${offsets.y.unit}, 0)`;
291273
}
292274

293275
function _resetStyles(element) {

src/utils/getParallaxOffsets.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { scaleBetween } from './index';
2+
3+
/**
4+
* Gets the parallax X and Y offsets to be applied to an element
5+
* based upon the percent the element has moved in the viewport
6+
* and the min/max offsets
7+
* @returns {Object}
8+
*/
9+
10+
export default function getParallaxOffsets(offsets, percentMoved, slowerScrollRate) {
11+
const {
12+
yMin,
13+
yMax,
14+
xMin,
15+
xMax,
16+
} = offsets;
17+
18+
const yUnit = yMax.unit;
19+
const xUnit = xMax.unit;
20+
21+
// sets parallax to faster or slower than the rate of scroll
22+
let x = 0;
23+
let y = 0;
24+
25+
if (slowerScrollRate) {
26+
x = scaleBetween(percentMoved, xMin.value, xMax.value, 0, 100);
27+
y = scaleBetween(percentMoved, yMin.value, yMax.value, 0, 100);
28+
} else {
29+
// flipped max/min
30+
x = scaleBetween(percentMoved, xMax.value, xMin.value, 0, 100);
31+
y = scaleBetween(percentMoved, yMax.value, yMin.value, 0, 100);
32+
}
33+
34+
return {
35+
x: {
36+
value: x,
37+
unit: xUnit,
38+
},
39+
y: {
40+
value: y,
41+
unit: yUnit,
42+
},
43+
};
44+
}

0 commit comments

Comments
 (0)