refactor animations once again
This commit is contained in:
@@ -1,36 +1,39 @@
|
||||
import gsap from "gsap";
|
||||
import { type HTMLAttributes,
|
||||
type ReactNode, useLayoutEffect, useRef } from "react";
|
||||
import { useGsapContext } from "~/app/_providers/GsapProvicer";
|
||||
import { type HTMLAttributes, type ReactNode, useRef } from "react";
|
||||
import { useReveal } from "./useReveal";
|
||||
|
||||
const AnimatedDiv = (
|
||||
{
|
||||
children,
|
||||
position,
|
||||
className,
|
||||
animationMode='to',
|
||||
animationMode = 'to',
|
||||
scrollOnly = false,
|
||||
once = false,
|
||||
debugId,
|
||||
...tweenVars
|
||||
}:
|
||||
gsap.TweenVars & {
|
||||
children:ReactNode,
|
||||
position:gsap.Position,
|
||||
animationMode?: 'from'|'to',
|
||||
className?:HTMLAttributes<HTMLDivElement>['className']
|
||||
children: ReactNode,
|
||||
position: gsap.Position,
|
||||
animationMode?: 'from' | 'to',
|
||||
scrollOnly?: boolean,
|
||||
once?: boolean,
|
||||
debugId?: string,
|
||||
className?: HTMLAttributes<HTMLDivElement>['className']
|
||||
}
|
||||
) => {
|
||||
const div = useRef<HTMLDivElement>(null);
|
||||
const gsapContext = useGsapContext()
|
||||
useLayoutEffect(() => {
|
||||
let tween:gsap.core.Tween;
|
||||
switch(animationMode) {
|
||||
case 'from':
|
||||
tween = gsap.from(div.current,tweenVars);
|
||||
break;
|
||||
case 'to':
|
||||
tween = gsap.to(div.current,tweenVars);
|
||||
break;
|
||||
}
|
||||
gsapContext?.addAnimation(tween,position)
|
||||
},[])
|
||||
const div = useRef<HTMLDivElement>(null)
|
||||
useReveal(div, {
|
||||
position,
|
||||
scrollOnly,
|
||||
once,
|
||||
debugId,
|
||||
makeReveal: (el) =>
|
||||
animationMode === 'from'
|
||||
? gsap.from(el, { ...tweenVars, paused: true })
|
||||
: gsap.to(el, { ...tweenVars, paused: true }),
|
||||
})
|
||||
return (
|
||||
<div ref={div} className={className}>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user