Socket
Socket
Sign inDemoInstall

parallax-controller

Package Overview
Dependencies
1
Maintainers
1
Versions
60
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.0 to 1.1.1

4

dist/helpers/createLimitsWithTranslationsForRelativeElements.d.ts

@@ -5,3 +5,3 @@ import { Rect } from '../classes/Rect';

import { Scroll } from '../classes/Scroll';
import { ParallaxStartEndEffects } from '../types';
export declare function createLimitsWithTranslationsForRelativeElements(rect: Rect, view: View, effects: ParallaxStartEndEffects, scroll: Scroll, shouldStartAnimationInitialInView?: boolean): Limits;
import { ParallaxStartEndEffects, ValidScrollAxis } from '../types';
export declare function createLimitsWithTranslationsForRelativeElements(rect: Rect, view: View, effects: ParallaxStartEndEffects, scroll: Scroll, scrollAxis: ValidScrollAxis, shouldStartAnimationInitialInView?: boolean): Limits;

@@ -0,2 +1,3 @@

import { ValidScrollAxis } from '../types';
import { ParallaxElementConfig, ParallaxStartEndEffects } from '../types';
export declare function getShouldScaleTranslateEffects(props: ParallaxElementConfig, effects: ParallaxStartEndEffects): boolean;
export declare function getShouldScaleTranslateEffects(props: ParallaxElementConfig, effects: ParallaxStartEndEffects, scrollAxis: ValidScrollAxis): boolean;

@@ -187,3 +187,3 @@ 'use strict';

out.unit = str.match(/[\d.\-\+]*\s*(.*)/)[1] || defaultUnit; // @ts-expect-error
out.unit = str.match(/[\d.\-+]*\s*(.*)/)[1] || defaultUnit; // @ts-expect-error

@@ -502,3 +502,3 @@ var isValidUnit = VALID_UNITS.includes(out.unit);

};
function createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, shouldStartAnimationInitialInView) {
function createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, scrollAxis, shouldStartAnimationInitialInView) {
// get start and end accounting for percent effects

@@ -520,14 +520,20 @@ var translateX = effects.translateX || DEFAULT_VALUE;

var endY = rect.bottom;
var endX = rect.right; // let multiplierY = 1;
// if (scrollAxis === ScrollAxis.vertical) {
var endX = rect.right;
var startMultiplierY = 1;
var endMultiplierY = 1;
var startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);
var endMultiplierY = startMultiplierY; // }
// let multiplierX = 1;
// if (scrollAxis === ScrollAxis.horizontal) {
if (scrollAxis === exports.ScrollAxis.vertical) {
startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);
endMultiplierY = startMultiplierY;
}
var startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);
var endMultiplierX = startMultiplierX; // }
// Apply the scale to initial values
var startMultiplierX = 1;
var endMultiplierX = 1;
if (scrollAxis === exports.ScrollAxis.horizontal) {
startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);
endMultiplierX = startMultiplierX;
} // Apply the scale to initial values
if (startTranslateYPx < 0) {

@@ -618,3 +624,3 @@ startY = startY + startTranslateYPx * startMultiplierY;

function getShouldScaleTranslateEffects(props, effects) {
function getShouldScaleTranslateEffects(props, effects, scrollAxis) {
if (props.rootMargin || props.targetElement) {

@@ -624,3 +630,3 @@ return false;

if (!!effects.translateX || !!effects.translateY) {
if (!!effects.translateX && scrollAxis === exports.ScrollAxis.horizontal || !!effects.translateY && scrollAxis === exports.ScrollAxis.vertical) {
return true;

@@ -667,3 +673,3 @@ }

});
var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects);
var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects, this.scrollAxis);

@@ -681,3 +687,3 @@ if (typeof this.props.startScroll === 'number' && typeof this.props.endScroll === 'number') {

if (shouldScaleTranslateEffects) {
this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.props.shouldStartAnimationInitialInView);
this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.scrollAxis, this.props.shouldStartAnimationInitialInView);
this.scaledEffects = scaleTranslateEffectsForSlowerScroll(this.effects, this.limits);

@@ -810,2 +816,3 @@ } else {

supportsPassiveOption = true;
return true;
}

@@ -812,0 +819,0 @@ }); // @ts-expect-error

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e,i,s,n,r,a=(t=require("bezier-easing"))&&"object"==typeof t&&"default"in t?t.default:t,o=function(t){this.startX=t.startX,this.startY=t.startY,this.endX=t.endX,this.endY=t.endY,this.totalX=this.endX-this.startX,this.totalY=this.endY-this.startY,this.startMultiplierX=t.startMultiplierX||1,this.endMultiplierX=t.endMultiplierX||1,this.startMultiplierY=t.startMultiplierY||1,this.endMultiplierY=t.endMultiplierY||1};function l(){return(l=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t[s]=i[s])}return t}).apply(this,arguments)}(e=exports.ValidCSSEffects||(exports.ValidCSSEffects={})).speed="speed",e.translateX="translateX",e.translateY="translateY",e.rotate="rotate",e.rotateX="rotateX",e.rotateY="rotateY",e.rotateZ="rotateZ",e.scale="scale",e.scaleX="scaleX",e.scaleY="scaleY",e.scaleZ="scaleZ",e.opacity="opacity",(i=exports.Units||(exports.Units={})).px="px",i["%"]="%",(s=exports.RotationUnits||(exports.RotationUnits={})).deg="deg",s.turn="turn",s.rad="rad",(exports.ScaleUnits||(exports.ScaleUnits={}))[""]="",(n=exports.ScrollAxis||(exports.ScrollAxis={})).vertical="vertical",n.horizontal="horizontal",(r=exports.EasingPreset||(exports.EasingPreset={})).ease="ease",r.easeIn="easeIn",r.easeOut="easeOut",r.easeInOut="easeInOut",r.easeInQuad="easeInQuad",r.easeInCubic="easeInCubic",r.easeInQuart="easeInQuart",r.easeInQuint="easeInQuint",r.easeInSine="easeInSine",r.easeInExpo="easeInExpo",r.easeInCirc="easeInCirc",r.easeOutQuad="easeOutQuad",r.easeOutCubic="easeOutCubic",r.easeOutQuart="easeOutQuart",r.easeOutQuint="easeOutQuint",r.easeOutSine="easeOutSine",r.easeOutExpo="easeOutExpo",r.easeOutCirc="easeOutCirc",r.easeInOutQuad="easeInOutQuad",r.easeInOutCubic="easeInOutCubic",r.easeInOutQuart="easeInOutQuart",r.easeInOutQuint="easeInOutQuint",r.easeInOutSine="easeInOutSine",r.easeInOutExpo="easeInOutExpo",r.easeInOutCirc="easeInOutCirc",r.easeInBack="easeInBack",r.easeOutBack="easeOutBack",r.easeInOutBack="easeInOutBack";var h=0;function u(){return++h}var c=function(){function t(t){var e=t.el.getBoundingClientRect();if(t.view.scrollContainer){var i=t.view.scrollContainer.getBoundingClientRect();e=l({},e,{top:e.top-i.top,right:e.right-i.left,bottom:e.bottom-i.top,left:e.left-i.left})}this.height=t.el.offsetHeight,this.width=t.el.offsetWidth,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,t.rootMargin&&this._setRectWithRootMargin(t.rootMargin)}return t.prototype._setRectWithRootMargin=function(t){var e=t.top+t.bottom,i=t.left+t.right;this.top-=t.top,this.right+=t.right,this.bottom+=t.bottom,this.left-=t.left,this.height+=e,this.width+=i},t}(),d=[exports.ScaleUnits[""],exports.Units.px,exports.Units["%"],exports.RotationUnits.deg,exports.RotationUnits.turn,exports.RotationUnits.rad];function p(t,e){void 0===e&&(e=exports.Units["%"]);var i={value:0,unit:e};if(void 0===t)return i;if("number"!=typeof t&&"string"!=typeof t)throw new Error("Invalid value provided. Must provide a value as a string or number");if(t=String(t),i.value=parseFloat(t),i.unit=t.match(/[\d.\-\+]*\s*(.*)/)[1]||e,!d.includes(i.unit))throw new Error("Invalid unit provided.");return i}var f={ease:[.25,.1,.25,1],easeIn:[.42,0,1,1],easeOut:[0,0,.58,1],easeInOut:[.42,0,.58,1],easeInQuad:[.55,.085,.68,.53],easeInCubic:[.55,.055,.675,.19],easeInQuart:[.895,.03,.685,.22],easeInQuint:[.755,.05,.855,.06],easeInSine:[.47,0,.745,.715],easeInExpo:[.95,.05,.795,.035],easeInCirc:[.6,.04,.98,.335],easeOutQuad:[.25,.46,.45,.94],easeOutCubic:[.215,.61,.355,1],easeOutQuart:[.165,.84,.44,1],easeOutQuint:[.23,1,.32,1],easeOutSine:[.39,.575,.565,1],easeOutExpo:[.19,1,.22,1],easeOutCirc:[.075,.82,.165,1],easeInOutQuad:[.455,.03,.515,.955],easeInOutCubic:[.645,.045,.355,1],easeInOutQuart:[.77,0,.175,1],easeInOutQuint:[.86,0,.07,1],easeInOutSine:[.445,.05,.55,.95],easeInOutExpo:[1,0,0,1],easeInOutCirc:[.785,.135,.15,.86],easeInBack:[.6,-.28,.735,.045],easeOutBack:[.175,.885,.32,1.275],easeInOutBack:[.68,-.55,.265,1.55]};function v(t){if(Array.isArray(t))return a(t[0],t[1],t[2],t[3]);if("string"==typeof t&&void 0!==f[t]){var e=f[t];return a(e[0],e[1],e[2],e[3])}}var m=Object.values(exports.ValidCSSEffects),g={speed:"px",translateX:"%",translateY:"%",rotate:"deg",rotateX:"deg",rotateY:"deg",rotateZ:"deg",scale:"",scaleX:"",scaleY:"",scaleZ:"",opacity:""};function w(t,e){var i={};return m.forEach((function(s){var n=g[s];if("number"==typeof(null==t?void 0:t[s])){var r=null==t?void 0:t[s],a=-10*(r||0)+"px",o=p(10*(r||0)+"px"),l=p(a),h={start:o.value,end:l.value,unit:o.unit};e===exports.ScrollAxis.vertical&&(i.translateY=h),e===exports.ScrollAxis.horizontal&&(i.translateX=h)}if(Array.isArray(null==t?void 0:t[s])){var u=null==t?void 0:t[s];if(void 0!==u[0]&&void 0!==u[1]){var c=p(null==u?void 0:u[0],n),d=p(null==u?void 0:u[1],n),f=v(null==u?void 0:u[2]);if(i[s]={start:c.value,end:d.value,unit:c.unit,easing:f},c.unit!==d.unit)throw new Error("Must provide matching units for the min and max offset values of each axis.")}}})),i}function E(t,e,i,s){var n=(i-t)/e;return s&&(n=s(n)),n}function x(t,e,i){return i>=t&&i<=e}function _(t,e,i,s,n){return(i-e)*(t-s)/(n-s)+e}function I(t,e){return{value:_("function"==typeof t.easing?t.easing(e):e,(null==t?void 0:t.start)||0,(null==t?void 0:t.end)||0,0,1),unit:null==t?void 0:t.unit}}var S=Object.values(exports.ValidCSSEffects).filter((function(t){return"opacity"!==t}));function y(t,e,i){if(i){var s=function(t,e){return S.reduce((function(i,s){var n=t[s]&&I(t[s],e);return void 0===n||void 0===n.value||void 0===n.unit?i:i+(s+"(")+n.value+n.unit+")"}),"")}(t,e),n=function(t,e){var i=t.opacity&&I(t.opacity,e);return void 0===i||void 0===i.value||void 0===i.unit?"":""+i.value}(t,e);i.style.transform=s,i.style.opacity=n}}function O(t){var e=t.el;e&&(e.style.transform="",e.style.opacity="")}function C(t,e,i){var s=e>t,n=(Math.abs(t)+Math.abs(e))*(s?-1:1);return Math.max(i/(i+n),1)}function b(t,e){var i=t.start,s=t.end;if("%"===t.unit){var n=e/100;i*=n,s*=n}return{start:i,end:s}}var X={start:0,end:0,unit:""},Y=function(){function t(t){var e,i;this.el=t.el,this.props=t.props,this.scrollAxis=t.scrollAxis,this.id=u(),this.effects=w(this.props,this.scrollAxis),this.isInView=null,this.progress=0,this._setElementEasing(t.props.easing),e=t.el,i=Object.keys(this.effects).includes("opacity"),e.style.willChange="transform"+(i?",opacity":""),this.updatePosition=t.scrollAxis===exports.ScrollAxis.vertical?this._updatePositionVertical:this._updatePositionHorizontal}var e=t.prototype;return e.updateProps=function(t){return this.props=l({},this.props,t),this.effects=w(t,this.scrollAxis),this._setElementEasing(t.easing),this},e.setCachedAttributes=function(t,e){O(this),this.rect=new c({el:this.props.targetElement||this.el,rootMargin:this.props.rootMargin,view:t});var i,s,n=(s=this.effects,!((i=this.props).rootMargin||i.targetElement||!s.translateX&&!s.translateY));return"number"==typeof this.props.startScroll&&"number"==typeof this.props.endScroll?(this.limits=new o({startX:this.props.startScroll,startY:this.props.startScroll,endX:this.props.endScroll,endY:this.props.endScroll}),this):(n?(this.limits=function(t,e,i,s,n){var r=i.translateY||X,a=b(i.translateX||X,t.width),l=a.start,h=a.end,u=b(r,t.height),c=u.start,d=u.end,p=t.top-e.height,f=t.left-e.width,v=t.bottom,m=t.right,g=C(c,d,e.height+t.height),w=g,E=C(l,h,e.width+t.width),x=E;return c<0&&(p+=c*g),d>0&&(v+=d*w),l<0&&(f+=l*E),h>0&&(m+=h*x),f+=s.x,m+=s.x,p+=s.y,v+=s.y,n&&(s.y+t.top<e.height&&(g=1,w=C(c,d,(v=t.bottom+s.y)-(p=0)),d>0&&(v+=d*w)),s.x+t.left<e.width&&(E=1,x=C(l,h,(m=t.right+s.x)-(f=0)),h>0&&(m+=h*x))),new o({startX:f,startY:p,endX:m,endY:v,startMultiplierX:E,endMultiplierX:x,startMultiplierY:g,endMultiplierY:w})}(this.rect,t,this.effects,e,this.props.shouldStartAnimationInitialInView),this.scaledEffects=function(t,e){var i=l({},t);return i.translateX&&(i.translateX=l({},t.translateX,{start:i.translateX.start*e.startMultiplierX,end:i.translateX.end*e.endMultiplierX})),i.translateY&&(i.translateY=l({},t.translateY,{start:i.translateY.start*e.startMultiplierY,end:i.translateY.end*e.endMultiplierY})),i}(this.effects,this.limits)):this.limits=function(t,e,i,s){var n=t.top-e.height,r=t.left-e.width,a=t.bottom,l=t.right;return r+=i.x,n+=i.y,s&&(i.y+t.top<e.height&&(n=0),i.x+t.left<e.width&&(r=0)),new o({startX:r,startY:n,endX:l+=i.x,endY:a+=i.y})}(this.rect,t,e,this.props.shouldStartAnimationInitialInView),this._setElementStyles(),this)},e._updateElementIsInView=function(t){t!==this.isInView&&(t?this.props.onEnter&&this.props.onEnter():(this._setFinalStylesAndProgress(),this.props.onExit&&this.props.onExit())),this.isInView=t},e._setFinalStylesAndProgress=function(){var t=Math.round(this.progress);this._updateElementProgress(t)},e._setElementStyles=function(){y(this.scaledEffects||this.effects,this.progress,this.el)},e._updateElementProgress=function(t){this.progress=t,this.props.onProgressChange&&this.props.onProgressChange(this.progress),this.props.onChange&&this.props.onChange(this),this._setElementStyles()},e._setElementEasing=function(t){this.easing=v(t)},e._updatePositionHorizontal=function(t){if(!this.limits)return this;var e=x(this.limits.startX,this.limits.endX,t.x);if(this._updateElementIsInView(e),!e)return this;var i=E(this.limits.startX,this.limits.totalX,t.x,this.easing);return this._updateElementProgress(i),this},e._updatePositionVertical=function(t){if(!this.limits)return this;var e=x(this.limits.startY,this.limits.endY,t.y);if(this._updateElementIsInView(e),!this.isInView)return this;var i=E(this.limits.startY,this.limits.totalY,t.y,this.easing);return this._updateElementProgress(i),this},t}(),P=function(){function t(t){var e=t.width,i=t.height;this.scrollContainer=t.scrollContainer,this.width=e,this.height=i}return t.prototype.setSize=function(t,e){return this.width=t,this.height=e,this},t}(),A=function(){function t(t,e){this.x=t,this.y=e,this.dx=0,this.dy=0}return t.prototype.setScroll=function(t,e){return this.dx=t-this.x,this.dy=e-this.y,this.x=t,this.y=e,this},t}();function M(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}var Q=function(){function t(t){var e=t.scrollAxis,i=void 0===e?exports.ScrollAxis.vertical:e,s=t.scrollContainer;this.scrollAxis=i,this.elements=[],this._hasScrollContainer=!!s,this.viewEl=null!=s?s:window;var n=this._getScrollPosition();this.scroll=new A(n[0],n[1]),this.view=new P({width:0,height:0,scrollContainer:this._hasScrollContainer?s:void 0}),this._ticking=!1,this._supportsPassive=M(),this._bindAllMethods(),this._addListeners(this.viewEl),this._setViewSize()}t.init=function(e){if("undefined"==typeof window)throw new Error("Looks like ParallaxController.init() was called on the server. This method must be called on the client.");return new t(e)};var e=t.prototype;return e._bindAllMethods=function(){var t=this;["_addListeners","_removeListeners","_getScrollPosition","_handleScroll","_handleUpdateCache","_updateAllElements","_updateElementPosition","_setViewSize","getElements","createElement","removeElementById","resetElementStyles","updateElementPropsById","update","updateScrollContainer","destroy"].forEach((function(e){t[e]=t[e].bind(t)}))},e._addListeners=function(t){t.addEventListener("scroll",this._handleScroll,!!this._supportsPassive&&{passive:!0}),window.addEventListener("resize",this._handleUpdateCache,!1),window.addEventListener("blur",this._handleUpdateCache,!1),window.addEventListener("focus",this._handleUpdateCache,!1),window.addEventListener("load",this._handleUpdateCache,!1)},e._removeListeners=function(t){t.removeEventListener("scroll",this._handleScroll,!1),window.removeEventListener("resize",this._handleUpdateCache,!1),window.removeEventListener("blur",this._handleUpdateCache,!1),window.removeEventListener("focus",this._handleUpdateCache,!1),window.removeEventListener("load",this._handleUpdateCache,!1)},e._getScrollPosition=function(){return[this._hasScrollContainer?this.viewEl.scrollLeft:window.pageXOffset,this._hasScrollContainer?this.viewEl.scrollTop:window.pageYOffset]},e._handleScroll=function(){var t=this._getScrollPosition();this.scroll.setScroll(t[0],t[1]),!this._ticking&&this.elements.length>0&&(this._ticking=!0,window.requestAnimationFrame(this._updateAllElements))},e._handleUpdateCache=function(){this._setViewSize(),this._updateAllElements({updateCache:!0})},e._updateAllElements=function(t){var e=this,i=(void 0===t?{}:t).updateCache;this.elements&&this.elements.forEach((function(t){i&&t.setCachedAttributes(e.view,e.scroll),e._updateElementPosition(t)})),this._ticking=!1},e._updateElementPosition=function(t){t.props.disabled||t.updatePosition(this.scroll)},e._setViewSize=function(){if(this._hasScrollContainer)return this.view.setSize(this.viewEl.offsetWidth,this.viewEl.offsetHeight);var t=document.documentElement,e=window.innerWidth||t.clientWidth,i=window.innerHeight||t.clientHeight;return this.view.setSize(e,i)},e.getElements=function(){return this.elements},e.createElement=function(t){var e=new Y(l({},t,{scrollAxis:this.scrollAxis}));return e.setCachedAttributes(this.view,this.scroll),this.elements=this.elements?[].concat(this.elements,[e]):[e],this._updateElementPosition(e),e},e.removeElementById=function(t){this.elements&&(this.elements=this.elements.filter((function(e){return e.id!==t})))},e.updateElementPropsById=function(t,e){this.elements&&(this.elements=this.elements.map((function(i){return i.id===t?i.updateProps(e):i}))),this.update()},e.resetElementStyles=function(t){O(t)},e.update=function(){var t=this._getScrollPosition();this.scroll.setScroll(t[0],t[1]),this._setViewSize(),this._updateAllElements({updateCache:!0})},e.updateScrollContainer=function(t){this._removeListeners(this.viewEl),this.viewEl=t,this._hasScrollContainer=!!t,this.view=new P({width:0,height:0,scrollContainer:t}),this._setViewSize(),this._addListeners(this.viewEl),this._updateAllElements({updateCache:!0})},e.destroy=function(){this._removeListeners(this.viewEl),this.elements&&this.elements.forEach((function(t){return O(t)})),this.elements=void 0},t}();exports.Element=Y,exports.Limits=o,exports.ParallaxController=Q,exports.Rect=c,exports.Scroll=A,exports.View=P,exports.createId=u,exports.getProgressAmount=E,exports.isElementInView=x,exports.parseElementTransitionEffects=w,exports.parseValueAndUnit=p,exports.resetStyles=O,exports.scaleBetween=_,exports.scaleEffectByProgress=I,exports.setElementStyles=y,exports.testForPassiveScroll=M;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e,i,s,n,r,a=(t=require("bezier-easing"))&&"object"==typeof t&&"default"in t?t.default:t,o=function(t){this.startX=t.startX,this.startY=t.startY,this.endX=t.endX,this.endY=t.endY,this.totalX=this.endX-this.startX,this.totalY=this.endY-this.startY,this.startMultiplierX=t.startMultiplierX||1,this.endMultiplierX=t.endMultiplierX||1,this.startMultiplierY=t.startMultiplierY||1,this.endMultiplierY=t.endMultiplierY||1};function l(){return(l=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t[s]=i[s])}return t}).apply(this,arguments)}(e=exports.ValidCSSEffects||(exports.ValidCSSEffects={})).speed="speed",e.translateX="translateX",e.translateY="translateY",e.rotate="rotate",e.rotateX="rotateX",e.rotateY="rotateY",e.rotateZ="rotateZ",e.scale="scale",e.scaleX="scaleX",e.scaleY="scaleY",e.scaleZ="scaleZ",e.opacity="opacity",(i=exports.Units||(exports.Units={})).px="px",i["%"]="%",(s=exports.RotationUnits||(exports.RotationUnits={})).deg="deg",s.turn="turn",s.rad="rad",(exports.ScaleUnits||(exports.ScaleUnits={}))[""]="",(n=exports.ScrollAxis||(exports.ScrollAxis={})).vertical="vertical",n.horizontal="horizontal",(r=exports.EasingPreset||(exports.EasingPreset={})).ease="ease",r.easeIn="easeIn",r.easeOut="easeOut",r.easeInOut="easeInOut",r.easeInQuad="easeInQuad",r.easeInCubic="easeInCubic",r.easeInQuart="easeInQuart",r.easeInQuint="easeInQuint",r.easeInSine="easeInSine",r.easeInExpo="easeInExpo",r.easeInCirc="easeInCirc",r.easeOutQuad="easeOutQuad",r.easeOutCubic="easeOutCubic",r.easeOutQuart="easeOutQuart",r.easeOutQuint="easeOutQuint",r.easeOutSine="easeOutSine",r.easeOutExpo="easeOutExpo",r.easeOutCirc="easeOutCirc",r.easeInOutQuad="easeInOutQuad",r.easeInOutCubic="easeInOutCubic",r.easeInOutQuart="easeInOutQuart",r.easeInOutQuint="easeInOutQuint",r.easeInOutSine="easeInOutSine",r.easeInOutExpo="easeInOutExpo",r.easeInOutCirc="easeInOutCirc",r.easeInBack="easeInBack",r.easeOutBack="easeOutBack",r.easeInOutBack="easeInOutBack";var h=0;function u(){return++h}var c=function(){function t(t){var e=t.el.getBoundingClientRect();if(t.view.scrollContainer){var i=t.view.scrollContainer.getBoundingClientRect();e=l({},e,{top:e.top-i.top,right:e.right-i.left,bottom:e.bottom-i.top,left:e.left-i.left})}this.height=t.el.offsetHeight,this.width=t.el.offsetWidth,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,t.rootMargin&&this._setRectWithRootMargin(t.rootMargin)}return t.prototype._setRectWithRootMargin=function(t){var e=t.top+t.bottom,i=t.left+t.right;this.top-=t.top,this.right+=t.right,this.bottom+=t.bottom,this.left-=t.left,this.height+=e,this.width+=i},t}(),d=[exports.ScaleUnits[""],exports.Units.px,exports.Units["%"],exports.RotationUnits.deg,exports.RotationUnits.turn,exports.RotationUnits.rad];function p(t,e){void 0===e&&(e=exports.Units["%"]);var i={value:0,unit:e};if(void 0===t)return i;if("number"!=typeof t&&"string"!=typeof t)throw new Error("Invalid value provided. Must provide a value as a string or number");if(t=String(t),i.value=parseFloat(t),i.unit=t.match(/[\d.\-+]*\s*(.*)/)[1]||e,!d.includes(i.unit))throw new Error("Invalid unit provided.");return i}var f={ease:[.25,.1,.25,1],easeIn:[.42,0,1,1],easeOut:[0,0,.58,1],easeInOut:[.42,0,.58,1],easeInQuad:[.55,.085,.68,.53],easeInCubic:[.55,.055,.675,.19],easeInQuart:[.895,.03,.685,.22],easeInQuint:[.755,.05,.855,.06],easeInSine:[.47,0,.745,.715],easeInExpo:[.95,.05,.795,.035],easeInCirc:[.6,.04,.98,.335],easeOutQuad:[.25,.46,.45,.94],easeOutCubic:[.215,.61,.355,1],easeOutQuart:[.165,.84,.44,1],easeOutQuint:[.23,1,.32,1],easeOutSine:[.39,.575,.565,1],easeOutExpo:[.19,1,.22,1],easeOutCirc:[.075,.82,.165,1],easeInOutQuad:[.455,.03,.515,.955],easeInOutCubic:[.645,.045,.355,1],easeInOutQuart:[.77,0,.175,1],easeInOutQuint:[.86,0,.07,1],easeInOutSine:[.445,.05,.55,.95],easeInOutExpo:[1,0,0,1],easeInOutCirc:[.785,.135,.15,.86],easeInBack:[.6,-.28,.735,.045],easeOutBack:[.175,.885,.32,1.275],easeInOutBack:[.68,-.55,.265,1.55]};function v(t){if(Array.isArray(t))return a(t[0],t[1],t[2],t[3]);if("string"==typeof t&&void 0!==f[t]){var e=f[t];return a(e[0],e[1],e[2],e[3])}}var m=Object.values(exports.ValidCSSEffects),g={speed:"px",translateX:"%",translateY:"%",rotate:"deg",rotateX:"deg",rotateY:"deg",rotateZ:"deg",scale:"",scaleX:"",scaleY:"",scaleZ:"",opacity:""};function w(t,e){var i={};return m.forEach((function(s){var n=g[s];if("number"==typeof(null==t?void 0:t[s])){var r=null==t?void 0:t[s],a=-10*(r||0)+"px",o=p(10*(r||0)+"px"),l=p(a),h={start:o.value,end:l.value,unit:o.unit};e===exports.ScrollAxis.vertical&&(i.translateY=h),e===exports.ScrollAxis.horizontal&&(i.translateX=h)}if(Array.isArray(null==t?void 0:t[s])){var u=null==t?void 0:t[s];if(void 0!==u[0]&&void 0!==u[1]){var c=p(null==u?void 0:u[0],n),d=p(null==u?void 0:u[1],n),f=v(null==u?void 0:u[2]);if(i[s]={start:c.value,end:d.value,unit:c.unit,easing:f},c.unit!==d.unit)throw new Error("Must provide matching units for the min and max offset values of each axis.")}}})),i}function x(t,e,i,s){var n=(i-t)/e;return s&&(n=s(n)),n}function E(t,e,i){return i>=t&&i<=e}function _(t,e,i,s,n){return(i-e)*(t-s)/(n-s)+e}function S(t,e){return{value:_("function"==typeof t.easing?t.easing(e):e,(null==t?void 0:t.start)||0,(null==t?void 0:t.end)||0,0,1),unit:null==t?void 0:t.unit}}var I=Object.values(exports.ValidCSSEffects).filter((function(t){return"opacity"!==t}));function y(t,e,i){if(i){var s=function(t,e){return I.reduce((function(i,s){var n=t[s]&&S(t[s],e);return void 0===n||void 0===n.value||void 0===n.unit?i:i+(s+"(")+n.value+n.unit+")"}),"")}(t,e),n=function(t,e){var i=t.opacity&&S(t.opacity,e);return void 0===i||void 0===i.value||void 0===i.unit?"":""+i.value}(t,e);i.style.transform=s,i.style.opacity=n}}function O(t){var e=t.el;e&&(e.style.transform="",e.style.opacity="")}function C(t,e,i){var s=e>t,n=(Math.abs(t)+Math.abs(e))*(s?-1:1);return Math.max(i/(i+n),1)}function b(t,e){var i=t.start,s=t.end;if("%"===t.unit){var n=e/100;i*=n,s*=n}return{start:i,end:s}}var A={start:0,end:0,unit:""},X=function(){function t(t){var e,i;this.el=t.el,this.props=t.props,this.scrollAxis=t.scrollAxis,this.id=u(),this.effects=w(this.props,this.scrollAxis),this.isInView=null,this.progress=0,this._setElementEasing(t.props.easing),e=t.el,i=Object.keys(this.effects).includes("opacity"),e.style.willChange="transform"+(i?",opacity":""),this.updatePosition=t.scrollAxis===exports.ScrollAxis.vertical?this._updatePositionVertical:this._updatePositionHorizontal}var e=t.prototype;return e.updateProps=function(t){return this.props=l({},this.props,t),this.effects=w(t,this.scrollAxis),this._setElementEasing(t.easing),this},e.setCachedAttributes=function(t,e){O(this),this.rect=new c({el:this.props.targetElement||this.el,rootMargin:this.props.rootMargin,view:t});var i,s,n,r=(s=this.effects,n=this.scrollAxis,!(i=this.props).rootMargin&&!i.targetElement&&!!(s.translateX&&n===exports.ScrollAxis.horizontal||s.translateY&&n===exports.ScrollAxis.vertical));return"number"==typeof this.props.startScroll&&"number"==typeof this.props.endScroll?(this.limits=new o({startX:this.props.startScroll,startY:this.props.startScroll,endX:this.props.endScroll,endY:this.props.endScroll}),this):(r?(this.limits=function(t,e,i,s,n,r){var a=i.translateY||A,l=b(i.translateX||A,t.width),h=l.start,u=l.end,c=b(a,t.height),d=c.start,p=c.end,f=t.top-e.height,v=t.left-e.width,m=t.bottom,g=t.right,w=1,x=1;n===exports.ScrollAxis.vertical&&(x=w=C(d,p,e.height+t.height));var E=1,_=1;return n===exports.ScrollAxis.horizontal&&(_=E=C(h,u,e.width+t.width)),d<0&&(f+=d*w),p>0&&(m+=p*x),h<0&&(v+=h*E),u>0&&(g+=u*_),v+=s.x,g+=s.x,f+=s.y,m+=s.y,r&&(s.y+t.top<e.height&&(w=1,x=C(d,p,(m=t.bottom+s.y)-(f=0)),p>0&&(m+=p*x)),s.x+t.left<e.width&&(E=1,_=C(h,u,(g=t.right+s.x)-(v=0)),u>0&&(g+=u*_))),new o({startX:v,startY:f,endX:g,endY:m,startMultiplierX:E,endMultiplierX:_,startMultiplierY:w,endMultiplierY:x})}(this.rect,t,this.effects,e,this.scrollAxis,this.props.shouldStartAnimationInitialInView),this.scaledEffects=function(t,e){var i=l({},t);return i.translateX&&(i.translateX=l({},t.translateX,{start:i.translateX.start*e.startMultiplierX,end:i.translateX.end*e.endMultiplierX})),i.translateY&&(i.translateY=l({},t.translateY,{start:i.translateY.start*e.startMultiplierY,end:i.translateY.end*e.endMultiplierY})),i}(this.effects,this.limits)):this.limits=function(t,e,i,s){var n=t.top-e.height,r=t.left-e.width,a=t.bottom,l=t.right;return r+=i.x,n+=i.y,s&&(i.y+t.top<e.height&&(n=0),i.x+t.left<e.width&&(r=0)),new o({startX:r,startY:n,endX:l+=i.x,endY:a+=i.y})}(this.rect,t,e,this.props.shouldStartAnimationInitialInView),this._setElementStyles(),this)},e._updateElementIsInView=function(t){t!==this.isInView&&(t?this.props.onEnter&&this.props.onEnter():(this._setFinalStylesAndProgress(),this.props.onExit&&this.props.onExit())),this.isInView=t},e._setFinalStylesAndProgress=function(){var t=Math.round(this.progress);this._updateElementProgress(t)},e._setElementStyles=function(){y(this.scaledEffects||this.effects,this.progress,this.el)},e._updateElementProgress=function(t){this.progress=t,this.props.onProgressChange&&this.props.onProgressChange(this.progress),this.props.onChange&&this.props.onChange(this),this._setElementStyles()},e._setElementEasing=function(t){this.easing=v(t)},e._updatePositionHorizontal=function(t){if(!this.limits)return this;var e=E(this.limits.startX,this.limits.endX,t.x);if(this._updateElementIsInView(e),!e)return this;var i=x(this.limits.startX,this.limits.totalX,t.x,this.easing);return this._updateElementProgress(i),this},e._updatePositionVertical=function(t){if(!this.limits)return this;var e=E(this.limits.startY,this.limits.endY,t.y);if(this._updateElementIsInView(e),!this.isInView)return this;var i=x(this.limits.startY,this.limits.totalY,t.y,this.easing);return this._updateElementProgress(i),this},t}(),Y=function(){function t(t){var e=t.width,i=t.height;this.scrollContainer=t.scrollContainer,this.width=e,this.height=i}return t.prototype.setSize=function(t,e){return this.width=t,this.height=e,this},t}(),P=function(){function t(t,e){this.x=t,this.y=e,this.dx=0,this.dy=0}return t.prototype.setScroll=function(t,e){return this.dx=t-this.x,this.dy=e-this.y,this.x=t,this.y=e,this},t}();function M(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){return t=!0,!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}var Q=function(){function t(t){var e=t.scrollAxis,i=void 0===e?exports.ScrollAxis.vertical:e,s=t.scrollContainer;this.scrollAxis=i,this.elements=[],this._hasScrollContainer=!!s,this.viewEl=null!=s?s:window;var n=this._getScrollPosition();this.scroll=new P(n[0],n[1]),this.view=new Y({width:0,height:0,scrollContainer:this._hasScrollContainer?s:void 0}),this._ticking=!1,this._supportsPassive=M(),this._bindAllMethods(),this._addListeners(this.viewEl),this._setViewSize()}t.init=function(e){if("undefined"==typeof window)throw new Error("Looks like ParallaxController.init() was called on the server. This method must be called on the client.");return new t(e)};var e=t.prototype;return e._bindAllMethods=function(){var t=this;["_addListeners","_removeListeners","_getScrollPosition","_handleScroll","_handleUpdateCache","_updateAllElements","_updateElementPosition","_setViewSize","getElements","createElement","removeElementById","resetElementStyles","updateElementPropsById","update","updateScrollContainer","destroy"].forEach((function(e){t[e]=t[e].bind(t)}))},e._addListeners=function(t){t.addEventListener("scroll",this._handleScroll,!!this._supportsPassive&&{passive:!0}),window.addEventListener("resize",this._handleUpdateCache,!1),window.addEventListener("blur",this._handleUpdateCache,!1),window.addEventListener("focus",this._handleUpdateCache,!1),window.addEventListener("load",this._handleUpdateCache,!1)},e._removeListeners=function(t){t.removeEventListener("scroll",this._handleScroll,!1),window.removeEventListener("resize",this._handleUpdateCache,!1),window.removeEventListener("blur",this._handleUpdateCache,!1),window.removeEventListener("focus",this._handleUpdateCache,!1),window.removeEventListener("load",this._handleUpdateCache,!1)},e._getScrollPosition=function(){return[this._hasScrollContainer?this.viewEl.scrollLeft:window.pageXOffset,this._hasScrollContainer?this.viewEl.scrollTop:window.pageYOffset]},e._handleScroll=function(){var t=this._getScrollPosition();this.scroll.setScroll(t[0],t[1]),!this._ticking&&this.elements.length>0&&(this._ticking=!0,window.requestAnimationFrame(this._updateAllElements))},e._handleUpdateCache=function(){this._setViewSize(),this._updateAllElements({updateCache:!0})},e._updateAllElements=function(t){var e=this,i=(void 0===t?{}:t).updateCache;this.elements&&this.elements.forEach((function(t){i&&t.setCachedAttributes(e.view,e.scroll),e._updateElementPosition(t)})),this._ticking=!1},e._updateElementPosition=function(t){t.props.disabled||t.updatePosition(this.scroll)},e._setViewSize=function(){if(this._hasScrollContainer)return this.view.setSize(this.viewEl.offsetWidth,this.viewEl.offsetHeight);var t=document.documentElement,e=window.innerWidth||t.clientWidth,i=window.innerHeight||t.clientHeight;return this.view.setSize(e,i)},e.getElements=function(){return this.elements},e.createElement=function(t){var e=new X(l({},t,{scrollAxis:this.scrollAxis}));return e.setCachedAttributes(this.view,this.scroll),this.elements=this.elements?[].concat(this.elements,[e]):[e],this._updateElementPosition(e),e},e.removeElementById=function(t){this.elements&&(this.elements=this.elements.filter((function(e){return e.id!==t})))},e.updateElementPropsById=function(t,e){this.elements&&(this.elements=this.elements.map((function(i){return i.id===t?i.updateProps(e):i}))),this.update()},e.resetElementStyles=function(t){O(t)},e.update=function(){var t=this._getScrollPosition();this.scroll.setScroll(t[0],t[1]),this._setViewSize(),this._updateAllElements({updateCache:!0})},e.updateScrollContainer=function(t){this._removeListeners(this.viewEl),this.viewEl=t,this._hasScrollContainer=!!t,this.view=new Y({width:0,height:0,scrollContainer:t}),this._setViewSize(),this._addListeners(this.viewEl),this._updateAllElements({updateCache:!0})},e.destroy=function(){this._removeListeners(this.viewEl),this.elements&&this.elements.forEach((function(t){return O(t)})),this.elements=void 0},t}();exports.Element=X,exports.Limits=o,exports.ParallaxController=Q,exports.Rect=c,exports.Scroll=P,exports.View=Y,exports.createId=u,exports.getProgressAmount=x,exports.isElementInView=E,exports.parseElementTransitionEffects=w,exports.parseValueAndUnit=p,exports.resetStyles=O,exports.scaleBetween=_,exports.scaleEffectByProgress=S,exports.setElementStyles=y,exports.testForPassiveScroll=M;
//# sourceMappingURL=parallax-controller.cjs.production.min.js.map

@@ -193,3 +193,3 @@ import bezier from 'bezier-easing';

out.unit = str.match(/[\d.\-\+]*\s*(.*)/)[1] || defaultUnit; // @ts-expect-error
out.unit = str.match(/[\d.\-+]*\s*(.*)/)[1] || defaultUnit; // @ts-expect-error

@@ -508,3 +508,3 @@ var isValidUnit = VALID_UNITS.includes(out.unit);

};
function createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, shouldStartAnimationInitialInView) {
function createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, scrollAxis, shouldStartAnimationInitialInView) {
// get start and end accounting for percent effects

@@ -526,14 +526,20 @@ var translateX = effects.translateX || DEFAULT_VALUE;

var endY = rect.bottom;
var endX = rect.right; // let multiplierY = 1;
// if (scrollAxis === ScrollAxis.vertical) {
var endX = rect.right;
var startMultiplierY = 1;
var endMultiplierY = 1;
var startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);
var endMultiplierY = startMultiplierY; // }
// let multiplierX = 1;
// if (scrollAxis === ScrollAxis.horizontal) {
if (scrollAxis === ScrollAxis.vertical) {
startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);
endMultiplierY = startMultiplierY;
}
var startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);
var endMultiplierX = startMultiplierX; // }
// Apply the scale to initial values
var startMultiplierX = 1;
var endMultiplierX = 1;
if (scrollAxis === ScrollAxis.horizontal) {
startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);
endMultiplierX = startMultiplierX;
} // Apply the scale to initial values
if (startTranslateYPx < 0) {

@@ -624,3 +630,3 @@ startY = startY + startTranslateYPx * startMultiplierY;

function getShouldScaleTranslateEffects(props, effects) {
function getShouldScaleTranslateEffects(props, effects, scrollAxis) {
if (props.rootMargin || props.targetElement) {

@@ -630,3 +636,3 @@ return false;

if (!!effects.translateX || !!effects.translateY) {
if (!!effects.translateX && scrollAxis === ScrollAxis.horizontal || !!effects.translateY && scrollAxis === ScrollAxis.vertical) {
return true;

@@ -673,3 +679,3 @@ }

});
var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects);
var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects, this.scrollAxis);

@@ -687,3 +693,3 @@ if (typeof this.props.startScroll === 'number' && typeof this.props.endScroll === 'number') {

if (shouldScaleTranslateEffects) {
this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.props.shouldStartAnimationInitialInView);
this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.scrollAxis, this.props.shouldStartAnimationInitialInView);
this.scaledEffects = scaleTranslateEffectsForSlowerScroll(this.effects, this.limits);

@@ -816,2 +822,3 @@ } else {

supportsPassiveOption = true;
return true;
}

@@ -818,0 +825,0 @@ }); // @ts-expect-error

{
"version": "1.1.0",
"version": "1.1.1",
"license": "MIT",

@@ -4,0 +4,0 @@ "main": "dist/index.js",

# 🕹 Parallax Controller
[![npm version](https://badge.fury.io/js/parallax-controller.svg)](https://badge.fury.io/js/parallax-controller) [![codecov](https://codecov.io/gh/jscottsmith/parallax-controller/branch/master/graph/badge.svg)](https://codecov.io/gh/jscottsmith/parallax-controller)
[![NPM Version Latest](https://img.shields.io/npm/v/parallax-controller/latest)](https://www.npmjs.com/package/parallax-controller)
[![NPM Downloads](https://img.shields.io/npm/dm/parallax-controller)](https://www.npmjs.com/package/parallax-controller)
[![Codecov](https://codecov.io/gh/jscottsmith/parallax-controller/branch/master/graph/badge.svg)](https://codecov.io/gh/jscottsmith/parallax-controller)
[![Test and Lint](https://github.com/jscottsmith/parallax-controller/actions/workflows/main.yml/badge.svg)](https://github.com/jscottsmith/parallax-controller/actions/workflows/main.yml)
[![Size](https://github.com/jscottsmith/parallax-controller/actions/workflows/size.yml/badge.svg)](https://github.com/jscottsmith/parallax-controller/actions/workflows/size.yml)
[![Coverage](https://github.com/jscottsmith/parallax-controller/actions/workflows/coverage.yml/badge.svg)](https://github.com/jscottsmith/parallax-controller/actions/workflows/coverage.yml)
Core classes and controller for creating parallax scrolling effects. Designed to provide scroll based animations for elements relative to the view. Built for performance by caching important attributes that cause reflow and layout when accessing.

@@ -6,0 +12,0 @@

@@ -88,3 +88,4 @@ import bezier from 'bezier-easing';

this.props,
this.effects
this.effects,
this.scrollAxis
);

@@ -111,2 +112,3 @@

scroll,
this.scrollAxis,
this.props.shouldStartAnimationInitialInView

@@ -113,0 +115,0 @@ );

@@ -9,3 +9,3 @@ import { ParsedValueEffect } from '../types';

import { getStartEndValueInPx } from './getStartEndValueInPx';
import { ParallaxStartEndEffects } from '../types';
import { ParallaxStartEndEffects, ScrollAxis, ValidScrollAxis } from '../types';

@@ -23,2 +23,3 @@ const DEFAULT_VALUE: ParsedValueEffect = {

scroll: Scroll,
scrollAxis: ValidScrollAxis,
shouldStartAnimationInitialInView?: boolean

@@ -45,20 +46,22 @@ ): Limits {

// let multiplierY = 1;
// if (scrollAxis === ScrollAxis.vertical) {
let startMultiplierY = getTranslateScalar(
startTranslateYPx,
endTranslateYPx,
view.height + rect.height
);
let endMultiplierY = startMultiplierY;
// }
// let multiplierX = 1;
// if (scrollAxis === ScrollAxis.horizontal) {
let startMultiplierX = getTranslateScalar(
startTranslateXPx,
endTranslateXPx,
view.width + rect.width
);
let endMultiplierX = startMultiplierX;
// }
let startMultiplierY = 1;
let endMultiplierY = 1;
if (scrollAxis === ScrollAxis.vertical) {
startMultiplierY = getTranslateScalar(
startTranslateYPx,
endTranslateYPx,
view.height + rect.height
);
endMultiplierY = startMultiplierY;
}
let startMultiplierX = 1;
let endMultiplierX = 1;
if (scrollAxis === ScrollAxis.horizontal) {
startMultiplierX = getTranslateScalar(
startTranslateXPx,
endTranslateXPx,
view.width + rect.width
);
endMultiplierX = startMultiplierX;
}

@@ -65,0 +68,0 @@ // Apply the scale to initial values

@@ -5,2 +5,3 @@ import { EffectNumber, EffectString } from '../types';

import { parseElementTransitionEffects } from './parseElementTransitionEffects';
import { ScrollAxis, ValidScrollAxis } from '..';

@@ -13,14 +14,21 @@ type Offset = string | number;

y0: Offset,
y1: Offset
y1: Offset,
scrollAxis: ValidScrollAxis = ScrollAxis.vertical
) {
return parseElementTransitionEffects({
translateX: [x0, x1] as EffectNumber | EffectString,
translateY: [y0, y1] as EffectNumber | EffectString,
});
return parseElementTransitionEffects(
{
translateX: [x0, x1] as EffectNumber | EffectString,
translateY: [y0, y1] as EffectNumber | EffectString,
},
scrollAxis
);
}
function createEffect(v1: Offset, v2: Offset, key: string) {
const effect = parseElementTransitionEffects({
[key]: [v1, v2],
});
const effect = parseElementTransitionEffects(
{
[key]: [v1, v2],
},
ScrollAxis.vertical
);
return effect;

@@ -27,0 +35,0 @@ }

@@ -0,93 +1,147 @@

import { ScrollAxis } from '..';
import { getShouldScaleTranslateEffects } from './getShouldScaleTranslateEffects';
describe('getShouldScaleTranslateEffects', () => {
test(`returns false when root margin is provided`, () => {
expect(
getShouldScaleTranslateEffects(
{
rootMargin: {
top: 10,
bottom: 10,
left: 10,
right: 10,
},
},
{}
)
).toEqual(false);
describe('given getShouldScaleTranslateEffects()', () => {
describe('when a root margin is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{ rootMargin: { top: 10, bottom: 10, left: 10, right: 10 } },
{},
ScrollAxis.vertical
)
).toEqual(false);
});
});
test(`returns true when translate x is provided`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
translateX: {
start: 10,
end: 100,
unit: 'px',
},
}
)
).toEqual(true);
describe('when axis is horizontal and', () => {
describe('when translateX provided', () => {
test(`then it returns true`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{ translateX: { start: 10, end: 100, unit: 'px' } },
ScrollAxis.horizontal
)
).toEqual(true);
});
});
describe('when translateY is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{ translateY: { start: 10, end: 100, unit: 'px' } },
ScrollAxis.horizontal
)
).toEqual(false);
});
});
describe('when translateY and translateX are provided', () => {
test(`then it returns true`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
translateY: { start: 10, end: 100, unit: 'px' },
translateX: { start: 10, end: 100, unit: 'px' },
},
ScrollAxis.horizontal
)
).toEqual(true);
});
});
});
describe('when axis is vertical and', () => {
describe('when translateX provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{ translateX: { start: 10, end: 100, unit: 'px' } },
ScrollAxis.vertical
)
).toEqual(false);
});
});
describe('when translateY is provided', () => {
test(`then it returns true`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{ translateY: { start: 10, end: 100, unit: 'px' } },
ScrollAxis.vertical
)
).toEqual(true);
});
});
describe('when translateY and translateX are provided', () => {
test(`then it returns true`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
translateY: { start: 10, end: 100, unit: 'px' },
translateX: { start: 10, end: 100, unit: 'px' },
},
ScrollAxis.vertical
)
).toEqual(true);
});
});
});
describe('when a target element is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{ targetElement: document.createElement('div') },
{},
ScrollAxis.vertical
)
).toEqual(false);
});
});
test(`returns true when translate y is provided`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
translateY: {
start: 10,
end: 100,
unit: 'px',
describe('when a scale effect is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
scale: { start: 10, end: 100, unit: '' },
scaleX: { start: 10, end: 100, unit: '' },
scaleY: { start: 10, end: 100, unit: '' },
scaleZ: { start: 10, end: 100, unit: '' },
},
}
)
).toEqual(true);
ScrollAxis.vertical
)
).toEqual(false);
});
});
test(`returns true when translate x and y is provided`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
translateX: {
start: 10,
end: 100,
unit: 'px',
describe('when a rotate effect is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
rotate: { start: 10, end: 100, unit: '' },
rotateX: { start: 10, end: 100, unit: '' },
rotateY: { start: 10, end: 100, unit: '' },
rotateZ: { start: 10, end: 100, unit: '' },
},
translateY: {
start: 10,
end: 100,
unit: 'px',
},
}
)
).toEqual(true);
ScrollAxis.vertical
)
).toEqual(false);
});
});
test(`returns false when a target element is provided`, () => {
expect(
getShouldScaleTranslateEffects(
{ targetElement: document.createElement('div') },
{}
)
).toEqual(false);
describe('when a opacity effect is provided', () => {
test(`then it returns false`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{ opacity: { start: 0, end: 1, unit: '' } },
ScrollAxis.vertical
)
).toEqual(false);
});
});
test(`returns false for other effects`, () => {
expect(
getShouldScaleTranslateEffects(
{},
{
scale: {
start: 10,
end: 100,
unit: 'px',
},
}
)
).toEqual(false);
});
});

@@ -0,1 +1,2 @@

import { ScrollAxis, ValidScrollAxis } from '../types';
import { ParallaxElementConfig, ParallaxStartEndEffects } from '../types';

@@ -5,3 +6,4 @@

props: ParallaxElementConfig,
effects: ParallaxStartEndEffects
effects: ParallaxStartEndEffects,
scrollAxis: ValidScrollAxis
): boolean {

@@ -12,3 +14,6 @@ if (props.rootMargin || props.targetElement) {

if (!!effects.translateX || !!effects.translateY) {
if (
(!!effects.translateX && scrollAxis === ScrollAxis.horizontal) ||
(!!effects.translateY && scrollAxis === ScrollAxis.vertical)
) {
return true;

@@ -15,0 +20,0 @@ }

@@ -10,3 +10,3 @@ import { ParsedValueEffect } from '..';

) {
let { start: start, end: end, unit } = translate;
let { start, end, unit } = translate;

@@ -13,0 +13,0 @@ if (unit === '%') {

export function createElementMock(properties = {}, methods = {}) {
const element = document.createElement('div');
Object.keys(properties).map((key) => {
Object.keys(properties).map(key => {
Object.defineProperty(element, key, {

@@ -11,3 +11,3 @@ // @ts-ignore

Object.keys(methods).map((key) => {
Object.keys(methods).map(key => {
// @ts-ignore

@@ -14,0 +14,0 @@ element[key] = methods[key];

@@ -42,3 +42,3 @@ import {

// @ts-ignore
out.unit = str.match(/[\d.\-\+]*\s*(.*)/)[1] || defaultUnit;
out.unit = str.match(/[\d.\-+]*\s*(.*)/)[1] || defaultUnit;

@@ -45,0 +45,0 @@ // @ts-expect-error

@@ -7,2 +7,3 @@ export function testForPassiveScroll() {

supportsPassiveOption = true;
return true;
},

@@ -9,0 +10,0 @@ });

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc