feat: update
This commit is contained in:
@@ -6,233 +6,236 @@ import SvgIcon from '@/components/SvgIcon/SvgIcon.tsx'
|
|||||||
const HomeIndex: React.FC = () => {
|
const HomeIndex: React.FC = () => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.body.classList.add('body')
|
document.body.classList.add('body')
|
||||||
if (!CSS.supports('animation-timeline: scroll()')) {
|
setTimeout(() => {
|
||||||
// const SPAN = 'max(45vw, 260px)';
|
if (!CSS.supports('animation-timeline: scroll()')) {
|
||||||
const CONFIG = [
|
// const SPAN = 'max(45vw, 260px)';
|
||||||
{
|
const CONFIG = [
|
||||||
x: () => {
|
{
|
||||||
return Math.max(260, window.innerWidth * 0.45) * -1
|
x: () => {
|
||||||
|
return Math.max(260, window.innerWidth * 0.45) * -1
|
||||||
|
},
|
||||||
|
y: -10,
|
||||||
|
r: -8,
|
||||||
|
h: 160,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(320, width * 0.55)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
y: -10,
|
|
||||||
r: -8,
|
|
||||||
h: 160,
|
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
{
|
||||||
width = el.parentNode.scrollWidth
|
x: () => {
|
||||||
}
|
return Math.max(260, window.innerWidth * 0.45)
|
||||||
return Math.max(320, width * 0.55)
|
},
|
||||||
|
y: -50,
|
||||||
|
r: 15,
|
||||||
|
h: 360,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(220, width * 0.3)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
x: () => {
|
x: () => {
|
||||||
return Math.max(260, window.innerWidth * 0.45)
|
return Math.max(260, window.innerWidth * 0.45) * -1
|
||||||
|
},
|
||||||
|
y: -30,
|
||||||
|
r: 6,
|
||||||
|
h: 300,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(330, width * 0.55)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
y: -50,
|
|
||||||
r: 15,
|
|
||||||
h: 360,
|
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
{
|
||||||
width = el.parentNode.scrollWidth
|
x: () => {
|
||||||
}
|
return Math.max(260, window.innerWidth * 0.45)
|
||||||
return Math.max(220, width * 0.3)
|
},
|
||||||
|
y: -30,
|
||||||
|
r: -5,
|
||||||
|
h: 400,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(305, width * 0.45)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
x: () => {
|
x: () => {
|
||||||
return Math.max(260, window.innerWidth * 0.45) * -1
|
return Math.max(260, window.innerWidth * 0.45) * -1
|
||||||
|
},
|
||||||
|
y: -45,
|
||||||
|
r: -20,
|
||||||
|
h: 525,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(160, width * 0.3)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
y: -30,
|
|
||||||
r: 6,
|
|
||||||
h: 300,
|
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
{
|
||||||
width = el.parentNode.scrollWidth
|
x: () => {
|
||||||
}
|
return Math.max(260, window.innerWidth * 0.45)
|
||||||
return Math.max(330, width * 0.55)
|
},
|
||||||
|
y: 10,
|
||||||
|
r: 10,
|
||||||
|
h: 160,
|
||||||
|
w: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return Math.max(320, width * 0.55)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
]
|
||||||
|
|
||||||
{
|
gsap.registerPlugin(ScrollTrigger)
|
||||||
x: () => {
|
console.info('gsap: ScrollTrigger registered')
|
||||||
return Math.max(260, window.innerWidth * 0.45)
|
|
||||||
},
|
|
||||||
y: -30,
|
|
||||||
r: -5,
|
|
||||||
h: 400,
|
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
gsap.set('.hero', { position: 'absolute' })
|
||||||
width = el.parentNode.scrollWidth
|
|
||||||
}
|
|
||||||
return Math.max(305, width * 0.45)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
const cards = document.querySelectorAll('.card')
|
||||||
x: () => {
|
|
||||||
return Math.max(260, window.innerWidth * 0.45) * -1
|
|
||||||
},
|
|
||||||
y: -45,
|
|
||||||
r: -20,
|
|
||||||
h: 525,
|
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
for (const [index, card] of [...cards].entries()) {
|
||||||
width = el.parentNode.scrollWidth
|
if (CONFIG[index]) {
|
||||||
}
|
gsap.from(card, {
|
||||||
return Math.max(160, width * 0.3)
|
x: CONFIG[index].x,
|
||||||
},
|
yPercent: CONFIG[index].y,
|
||||||
},
|
height: `${CONFIG[index].h}%`,
|
||||||
|
rotate: CONFIG[index].r,
|
||||||
|
width: CONFIG[index].w,
|
||||||
|
scrollTrigger: {
|
||||||
|
trigger: '.scroller',
|
||||||
|
start: 'top bottom',
|
||||||
|
end: 'top 50%',
|
||||||
|
scrub: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
gsap.from(
|
||||||
x: () => {
|
[
|
||||||
return Math.max(260, window.innerWidth * 0.45)
|
'.card__content',
|
||||||
},
|
'.card--two .card__column:last-of-type',
|
||||||
y: 10,
|
'.card--three .card__column:last-of-type',
|
||||||
r: 10,
|
'.card--five .card__column:last-of-type',
|
||||||
h: 160,
|
],
|
||||||
w: (el: any) => {
|
|
||||||
let width = el.parentNode.clientWidth
|
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
{
|
||||||
width = el.parentNode.scrollWidth
|
y: '-100cqh',
|
||||||
}
|
|
||||||
return Math.max(320, width * 0.55)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
gsap.registerPlugin(ScrollTrigger)
|
|
||||||
console.info('gsap: ScrollTrigger registered')
|
|
||||||
|
|
||||||
gsap.set('.hero', { position: 'absolute' })
|
|
||||||
|
|
||||||
const cards = document.querySelectorAll('.card')
|
|
||||||
|
|
||||||
for (const [index, card] of [...cards].entries()) {
|
|
||||||
if (CONFIG[index]) {
|
|
||||||
gsap.from(card, {
|
|
||||||
x: CONFIG[index].x,
|
|
||||||
yPercent: CONFIG[index].y,
|
|
||||||
height: `${CONFIG[index].h}%`,
|
|
||||||
rotate: CONFIG[index].r,
|
|
||||||
width: CONFIG[index].w,
|
|
||||||
scrollTrigger: {
|
scrollTrigger: {
|
||||||
trigger: '.scroller',
|
trigger: '.scroller',
|
||||||
start: 'top bottom',
|
start: 'top 80%',
|
||||||
end: 'top 50%',
|
end: 'top top',
|
||||||
scrub: true,
|
scrub: true,
|
||||||
},
|
},
|
||||||
})
|
},
|
||||||
}
|
)
|
||||||
}
|
|
||||||
|
|
||||||
gsap.from(
|
gsap.from(['.card__avatar img', '.password svg'], {
|
||||||
[
|
opacity: 0,
|
||||||
'.card__content',
|
scrollTrigger: {
|
||||||
'.card--two .card__column:last-of-type',
|
trigger: '.scroller',
|
||||||
'.card--three .card__column:last-of-type',
|
start: 'top 50%',
|
||||||
'.card--five .card__column:last-of-type',
|
end: 'top top',
|
||||||
],
|
scrub: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
{
|
gsap.from(['.card--five .card__dummy', '.card--six .card__dummy'], {
|
||||||
y: '-100cqh',
|
width: (el: any) => {
|
||||||
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
|
if (width < el.parentNode.scrollWidth) {
|
||||||
|
width = el.parentNode.scrollWidth
|
||||||
|
}
|
||||||
|
return width * 0.26
|
||||||
|
},
|
||||||
scrollTrigger: {
|
scrollTrigger: {
|
||||||
trigger: '.scroller',
|
trigger: '.scroller',
|
||||||
start: 'top 80%',
|
start: 'top 80%',
|
||||||
end: 'top top',
|
end: 'top top',
|
||||||
scrub: true,
|
scrub: true,
|
||||||
},
|
},
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
gsap.from(['.card__avatar img', '.password svg'], {
|
gsap.from(['.card--one .card__avatar', '.card--four .card__avatar'], {
|
||||||
opacity: 0,
|
scale: 2,
|
||||||
scrollTrigger: {
|
scrollTrigger: {
|
||||||
trigger: '.scroller',
|
trigger: '.scroller',
|
||||||
start: 'top 50%',
|
start: 'top bottom',
|
||||||
end: 'top top',
|
end: 'top top',
|
||||||
scrub: true,
|
scrub: true,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
gsap.from(['.card--five .card__dummy', '.card--six .card__dummy'], {
|
gsap.from('.card--two .card__avatar', {
|
||||||
width: (el: any) => {
|
width: (el: any) => {
|
||||||
let width = el.parentNode.clientWidth
|
let width = el.parentNode.clientWidth
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
if (width < el.parentNode.scrollWidth) {
|
||||||
width = el.parentNode.scrollWidth
|
width = el.parentNode.scrollWidth
|
||||||
}
|
}
|
||||||
return width * 0.26
|
return Math.max(330, width * 0.55) - 32
|
||||||
},
|
},
|
||||||
scrollTrigger: {
|
borderRadius: '12px',
|
||||||
trigger: '.scroller',
|
height: 'calc(300cqh - 2rem)',
|
||||||
start: 'top 80%',
|
scrollTrigger: {
|
||||||
end: 'top top',
|
trigger: '.scroller',
|
||||||
scrub: true,
|
start: 'top bottom',
|
||||||
},
|
end: 'top 20%',
|
||||||
})
|
scrub: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
gsap.from(['.card--one .card__avatar', '.card--four .card__avatar'], {
|
gsap.from('.card--six .card__column:last-of-type .card__company', {
|
||||||
scale: 2,
|
width: 120,
|
||||||
scrollTrigger: {
|
x: '-1rem',
|
||||||
trigger: '.scroller',
|
scrollTrigger: {
|
||||||
start: 'top bottom',
|
trigger: '.scroller',
|
||||||
end: 'top top',
|
start: 'top bottom',
|
||||||
scrub: true,
|
end: 'top 20%',
|
||||||
},
|
scrub: true,
|
||||||
})
|
},
|
||||||
|
})
|
||||||
|
|
||||||
gsap.from('.card--two .card__avatar', {
|
gsap.from('.cta', {
|
||||||
width: (el: any) => {
|
scale: 1,
|
||||||
let width = el.parentNode.clientWidth
|
scrollTrigger: {
|
||||||
|
trigger: '.scroller',
|
||||||
|
start: 'top bottom',
|
||||||
|
end: 'top 20%',
|
||||||
|
scrub: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
if (width < el.parentNode.scrollWidth) {
|
|
||||||
width = el.parentNode.scrollWidth
|
|
||||||
}
|
|
||||||
return Math.max(330, width * 0.55) - 32
|
|
||||||
},
|
|
||||||
borderRadius: '12px',
|
|
||||||
height: 'calc(300cqh - 2rem)',
|
|
||||||
scrollTrigger: {
|
|
||||||
trigger: '.scroller',
|
|
||||||
start: 'top bottom',
|
|
||||||
end: 'top 20%',
|
|
||||||
scrub: true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
gsap.from('.card--six .card__column:last-of-type .card__company', {
|
|
||||||
width: 120,
|
|
||||||
x: '-1rem',
|
|
||||||
scrollTrigger: {
|
|
||||||
trigger: '.scroller',
|
|
||||||
start: 'top bottom',
|
|
||||||
end: 'top 20%',
|
|
||||||
scrub: true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
gsap.from('.cta', {
|
|
||||||
scale: 1,
|
|
||||||
scrollTrigger: {
|
|
||||||
trigger: '.scroller',
|
|
||||||
start: 'top bottom',
|
|
||||||
end: 'top 20%',
|
|
||||||
scrub: true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return () => {
|
return () => {
|
||||||
document.body.classList.remove('body')
|
document.body.classList.remove('body')
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user