This animation is working perfectly in codepen
https://codepen.io/517design-the-solid/pen/NWQPyVJ
and here
but I can’t get it to work in Shopify. I’m using the dawn theme. I set up a new dev store with only this animation in it and it animates but it seems something is interfering with it. I can’t find any console errors and everything seems to be loading.
Here is my full code placed in a custom liquid section. I also created a new section the right way and got the same results.
JS
console.clear();
select = e => document.querySelector(e);
selectAll = e => document.querySelectorAll(e);
const stage = select('.dogstage');
const tubeInner = select(".dogtube__inner");
const clone = document.getElementsByClassName("dogline"); // as need to update node list
const numLines = 10;
const fontSize = gsap.getProperty(':root', '--fontSize');
const angle = 360/numLines;
let radius = 0;
let origin = 0;
function set3D() {
let width = window.innerWidth;
let fontSizePx = (width/100)*fontSize;
radius = (fontSizePx/2)/Math.sin((180/numLines)*(Math.PI/180)); // using Pythagoras Eq
origin = `50% 50% -${radius}px`;
}
function clodeNode() {
for (var i = 0; i < (numLines-1); i++) {
let newClone = clone[0].cloneNode(true); // clone the header
let lineClass = "dogline--"+(i+2); // create class name to append
newClone.classList.add(lineClass); // add incremented line class
tubeInner.appendChild(newClone); // append the clone
}
clone[0].classList.add("dogline--1"); // add line1 class to the first node
}
function positionTxt() {
gsap.set('.dogline', {
rotationX: function(index) {
return -angle*index;
},
z: radius,
transformOrigin: origin
});
}
function setProps(targets) {
targets.forEach( function(target) {
let paramSet = gsap.quickSetter(target, "css");
let degrees = gsap.getProperty(target, "rotateX");
let radians = degrees * (Math.PI/180);
let conversion = Math.abs(Math.cos(radians) / 2 + 0.5); // 1 - 0 half cosine wave
let fontW = 200 + 700*conversion;
let fontS = `${100 + 700*conversion}%`;
paramSet({
opacity: conversion+0.1,
// x: 300*conversion,
fontWeight: fontW,
fontStretch: fontS
});
console.log(fontW);
})
}
function scrollRotate() {
gsap.to('.dogline', {
scrollTrigger: {
trigger: '.dogstage',
scrub: 1,
start: "top top",
// markers: {
// startColor: "white",
// endColor: "red",
// fontSize: "16px",
// fontWeight: "bold",
// indent: 0
// }
},
rotateX: "+=1080",
onUpdate: function() {
setProps(this.targets());
}
})
gsap.to('.dogtube', {
scrollTrigger: {
trigger: '.dogstage',
scrub: 1,
start: "top top"
},
perspective: '1vw',
ease: 'expo.out'
})
}
function init() {
clodeNode();
set3D();
window.onresize = () => {
set3D();
positionTxt();
}
positionTxt();
setProps(gsap.utils.toArray(".dogline"));
scrollRotate();
gsap.to(stage, { autoAlpha: 1, duration: 2, delay: 2 });
}
window.onload = () => {
init();
};
HTML
<div class="dogstage">
<div class="dogtube">
<div class="dogtube__inner">
<h1 class="dogline">Rotation</h1>
</div>
</div>
</div>
CSS
@font-face {
font-family: 'Bandeins-Strange';
src: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/61488/BandeinsStrangeVariableGX.ttf') format('truetype');
font-stretch: 100% 800%;
font-weight: 200 800;
font-display: block;
}
:root {
--fontSize: 4;
}
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
html, body {
width: 100%;
height: 100%;
}
body {
color: white;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
height: 1000vh;
background: black;
}
.dogstage {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
visibility: hidden;
}
.dogtube {
position: fixed;
top: 50vh;
left: 50vw;
perspective: 100vw;
}
.dogtube__inner {
position: relative;
transform-style: preserve-3d;
}
.dogline {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
font-family: 'Bandeins-Strange';
font-size: calc(var(--fontSize) * 1vw);
font-stretch: 800%;
font-weight: 800;
text-transform: uppercase;
line-height: 1;
transform-style: preserve-3d;
}
scripts
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
Here is a screenshot of what it looks like in shopify.
https://snipboard.io/GnecTR.jpg
You can see what it should and does look like in codepen above
Any help would be greatly appreciated. Thank you