UNPKG

gsap-dattebayo

Version:

The ultimate GSAP-powered scroll animation library - Simple as AOS, powerful as GSAP. Modern animations for 2025-2026 web trends.

493 lines (484 loc) 12.4 kB
/*! * GSAP Dattebayo v0.1.0-alpha.1 * The ultimate GSAP-powered scroll animation library * https://github.com/serdjan/gsap-dattebayo * * Copyright 2025 GSAP Dattebayo * Released under the MIT License */ 'use strict'; var gsap = require('gsap'); require('gsap/ScrollTrigger'); require('gsap/SplitText'); /** * Helper utilities for GSAP Dattebayo */ /** * Convert selector or element to array of HTMLElements */ function toArray(target) { if (typeof target === 'string') { return Array.from(document.querySelectorAll(target)); } if (target instanceof HTMLElement) { return [target]; } if (target instanceof NodeList) { return Array.from(target); } if (Array.isArray(target)) { return target; } return []; } /** * Fade animations - Core reveal effects * 100% GSAP-powered, GPU-accelerated */ /** * Fade in - Simple opacity reveal */ function fadeIn(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, autoAlpha = true } = options; return gsap.to(toArray(target), { opacity: 1, ...(autoAlpha && { autoAlpha: 1 }), duration, ease, delay, force3D: true }); } /** * Fade out */ function fadeOut(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, autoAlpha = true } = options; return gsap.to(toArray(target), { opacity: 0, ...(autoAlpha && { autoAlpha: 0 }), duration, ease, delay, force3D: true }); } /** * Fade up - Fade in with upward movement (most popular scroll reveal) */ function fadeUp(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 50, autoAlpha = true } = options; return gsap.from(toArray(target), { opacity: 0, y: distance, ...(autoAlpha && { autoAlpha: 0 }), duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Fade down */ function fadeDown(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 50, autoAlpha = true } = options; return gsap.from(toArray(target), { opacity: 0, y: -distance, ...(autoAlpha && { autoAlpha: 0 }), duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Fade left */ function fadeLeft(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 50, autoAlpha = true } = options; return gsap.from(toArray(target), { opacity: 0, x: distance, ...(autoAlpha && { autoAlpha: 0 }), duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Fade right */ function fadeRight(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 50, autoAlpha = true } = options; return gsap.from(toArray(target), { opacity: 0, x: -distance, ...(autoAlpha && { autoAlpha: 0 }), duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Slide animations - Entrance/exit with movement * 100% GSAP transforms for GPU acceleration */ /** * Slide in from bottom (upward) */ function slideInUp(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 100 } = options; return gsap.from(toArray(target), { y: distance, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Slide in from top (downward) */ function slideInDown(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 100 } = options; return gsap.from(toArray(target), { y: -distance, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Slide in from left (rightward) */ function slideInLeft(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 100 } = options; return gsap.from(toArray(target), { x: -distance, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Slide in from right (leftward) */ function slideInRight(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, distance = 100 } = options; return gsap.from(toArray(target), { x: distance, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Slide out up */ function slideOutUp(target, options = {}) { const { duration = 1, ease = 'power2.in', delay = 0, distance = 100 } = options; return gsap.to(toArray(target), { y: -distance, autoAlpha: 0, duration, ease, delay, force3D: true }); } /** * Slide out down */ function slideOutDown(target, options = {}) { const { duration = 1, ease = 'power2.in', delay = 0, distance = 100 } = options; return gsap.to(toArray(target), { y: distance, autoAlpha: 0, duration, ease, delay, force3D: true }); } /** * Zoom/Scale animations - Modern reveal effects * GPU-accelerated scale transforms */ /** * Zoom in - Scale from small to normal */ function zoomIn(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, scale = 0, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { scale, opacity: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Zoom out - Scale from large to normal */ function zoomOut(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, scale = 1.5, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { scale, opacity: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Zoom in with upward movement (trendy combo) */ function zoomInUp(target, options = {}) { const { duration = 1, ease = 'back.out(1.7)', delay = 0, scale = 0, distance = 50, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { scale, y: distance, opacity: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Zoom in with downward movement */ function zoomInDown(target, options = {}) { const { duration = 1, ease = 'back.out(1.7)', delay = 0, scale = 0, distance = 50, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { scale, y: -distance, opacity: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Elastic zoom - Bouncy scale effect (2025 trend) */ function elasticZoom(target, options = {}) { const { duration = 1.5, ease = 'elastic.out(1, 0.3)', delay = 0, scale = 0, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { scale, opacity: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Rotation animations - 3D transform effects * GPU-accelerated rotations with perspective */ /** * Rotate in - 2D rotation reveal */ function rotateIn(target, options = {}) { const { duration = 1, ease = 'back.out(1.7)', delay = 0, rotation = 180, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { rotation, opacity: 0, scale: 0.5, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Rotate out */ function rotateOut(target, options = {}) { const { duration = 1, ease = 'power2.in', delay = 0, rotation = 180, transformOrigin = 'center center' } = options; return gsap.to(toArray(target), { rotation, opacity: 0, scale: 0.5, transformOrigin, duration, ease, delay, force3D: true }); } /** * Flip in horizontal (3D rotation on Y axis) */ function flipInX(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, transformOrigin = 'center center', perspective = 1000 } = options; return gsap.from(toArray(target), { rotationY: -90, opacity: 0, transformOrigin, transformPerspective: perspective, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Flip in vertical (3D rotation on X axis) */ function flipInY(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, transformOrigin = 'center center', perspective = 1000 } = options; return gsap.from(toArray(target), { rotationX: -90, opacity: 0, transformOrigin, transformPerspective: perspective, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Spin in - Continuous rotation entrance */ function spinIn(target, options = {}) { const { duration = 1, ease = 'power2.out', delay = 0, rotation = 720, transformOrigin = 'center center' } = options; return gsap.from(toArray(target), { rotation, opacity: 0, scale: 0, transformOrigin, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Blur animations - Modern 2025 trend effect * Blur-to-focus reveal using CSS filters (GPU-accelerated) */ /** * Blur to focus - From blurry to sharp (2025 trend) */ function blurToFocus(target, options = {}) { const { duration = 1.2, ease = 'power2.out', delay = 0, blurAmount = 20, scale = 1.1 } = options; return gsap.from(toArray(target), { filter: `blur(${blurAmount}px)`, opacity: 0, scale, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Focus to blur - Reverse effect */ function focusToBlur(target, options = {}) { const { duration = 1.2, ease = 'power2.in', delay = 0, blurAmount = 20, scale = 1.1 } = options; return gsap.to(toArray(target), { filter: `blur(${blurAmount}px)`, opacity: 0, scale, duration, ease, delay, force3D: true }); } /** * Blur in up - Blur with upward movement */ function blurInUp(target, options = {}) { const { duration = 1.2, ease = 'power2.out', delay = 0, blurAmount = 15, distance = 50 } = options; return gsap.from(toArray(target), { filter: `blur(${blurAmount}px)`, y: distance, opacity: 0, duration, ease, delay, force3D: true, clearProps: 'all' }); } /** * Blur zoom - Blur with scale effect (dramatic entrance) */ function blurZoom(target, options = {}) { const { duration = 1.5, ease = 'power3.out', delay = 0, blurAmount = 30, scale = 1.5 } = options; return gsap.from(toArray(target), { filter: `blur(${blurAmount}px)`, scale, opacity: 0, duration, ease, delay, force3D: true, clearProps: 'all' }); } exports.blurInUp = blurInUp; exports.blurToFocus = blurToFocus; exports.blurZoom = blurZoom; exports.elasticZoom = elasticZoom; exports.fadeDown = fadeDown; exports.fadeIn = fadeIn; exports.fadeLeft = fadeLeft; exports.fadeOut = fadeOut; exports.fadeRight = fadeRight; exports.fadeUp = fadeUp; exports.flipInX = flipInX; exports.flipInY = flipInY; exports.focusToBlur = focusToBlur; exports.rotateIn = rotateIn; exports.rotateOut = rotateOut; exports.slideInDown = slideInDown; exports.slideInLeft = slideInLeft; exports.slideInRight = slideInRight; exports.slideInUp = slideInUp; exports.slideOutDown = slideOutDown; exports.slideOutUp = slideOutUp; exports.spinIn = spinIn; exports.zoomIn = zoomIn; exports.zoomInDown = zoomInDown; exports.zoomInUp = zoomInUp; exports.zoomOut = zoomOut;