PARALLAX

Directions:

  1. Add the Animation Toolset to your Site Header Code Injection area. (If you already have GSAP installation you can remove lines 1 - 3)

  2. Add the Usage code into the Page Header Code Injection area of the page with your image block.

  3. Replace the #block-id with the Block ID of your image block.

  4. Adjust any of the properties to your liking.

    Squarespace Block ID Finder Extension

    Learn More About Parallax Here

SITE HEADER CODE INJECTION

<!-- GSAP Animation Library -->

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>

<!-- Scroll Animation Tools From crangrp.com -->

<script>

(function(){

const buildScrollAnimation = (el, start, end, mobileStart, mobileEnd) => {

if (!start && !end) return;

let params = {

start: start,

end: end

};

if (window.innerWidth <= 768) {

params.start = mobileStart;

params.end = mobileEnd;

}

document.querySelector(el).closest('.page-section').style.overflow = 'hidden';

if (params.start.opacity === 0) params.start.opacity = 0.01;

if (params.end.opacity === 0) params.end.opacity = 0.01;

const tl = gsap.timeline({

scrollTrigger: {

trigger: el,

start: "top bottom",

end: "bottom top",

scrub: params.end.momentum || 1

}

});

tl.fromTo(el, {

opacity: params.start.opacity || 1,

scale: params.start.scale || 1,

x: params.start.x || 0,

y: params.start.y || 0,

rotation: params.start.rotation || 0,

}, {

opacity: params.end.opacity || 1,

scale: params.end.scale || 1,

x: params.end.x || 0,

y: params.end.y || 0,

rotation: params.end.rotation || 0,

ease: 'none'

});

return tl;

}

window.wmScrollAnimations = [];

window.wmScrollAnimation = (el, start, end, mobileStart = {}, mobileEnd = {}) => {

if (document.readyState === 'complete' || document.readyState === 'interactive') {

let tl = buildScrollAnimation(el, start, end, mobileStart, mobileEnd);

console.log(tl)

window.wmScrollAnimations.push({el:el, start:start, end:end, mobileStart:mobileStart, mobileEnd:mobileEnd, tl:tl});

} else {

window.addEventListener('DOMContentLoaded', () => {

let tl = buildScrollAnimation(el, start, end, mobileStart, mobileEnd);

window.wmScrollAnimations.push({el:el, start:start, end:end, mobileStart:mobileStart, mobileEnd:mobileEnd, tl:tl});

});

}

};

const killAll = () => {

window.wmScrollAnimations.forEach(animation => {

animation.tl.kill(true)

gsap.set(animation.el, {clearProps: true})

})

window.wmScrollAnimations = [];

}

const handleResize = debounce(() => {

const allAnimations = window.wmScrollAnimations;

killAll();

allAnimations.forEach(animation => {

window.wmScrollAnimation(animation.el, animation.start, animation.end, animation.mobileStart, animation.mobileEnd);

});

if (document.body.matches('.sqs-edit-mode-active')) killAll()

}, 250);

window.addEventListener('resize', handleResize);

function debounce (func, delay){

let inDebounce;

return function() {

const context = this;

const args = arguments;

clearTimeout(inDebounce);

inDebounce = setTimeout(() => func.apply(context, args), delay);

};

};

}());

</script>

PAGE HEADER CODE INJECTION

<!-- Scroll Animation -->

<script>

window.wmScrollAnimation("#block-id", {

// "Start" Position

x: 0,

y: -50,

rotation: 0,

scale: 1,

opacity: 1,

},{

// "End" Position

x: 0,

y: 50,

rotation: 0,

scale: 1,

opacity: 1,

momentum: 1,

}, {

// Mobile "Start" Position

x: 0,

y: 0,

rotation: 0,

scale: 1,

opacity: 1,

}, {

// Mobile "End" Position

x: 0,

y: 0,

rotation: 0,

scale: 1,

opacity: 1,

});

</script>

If you’d like an expert to reach out and trouble shoot any issues you maybe having please submit a form. Typical callback time is 1 hour but can be up to 24 hrs.

For general questions please reach out to us at info@crangrp.com

Previous
Previous

Vertigo Effect

Next
Next

Buttons