From 60760a76d2ddab76892ec2ba55916f2abfd3ac88 Mon Sep 17 00:00:00 2001 From: Manoela Ilic Date: Wed, 19 Jun 2024 14:48:01 +0100 Subject: [PATCH] Update --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 4 + LICENSE | 21 ++ README.md | 27 +++ css/base.css | 370 +++++++++++++++++++++++++++++++++++ favicon.ico | Bin 0 -> 15086 bytes img/bg.jpg | Bin 0 -> 60329 bytes img/noise.png | Bin 0 -> 6789 bytes index.html | 137 +++++++++++++ index2.html | 137 +++++++++++++ index3.html | 135 +++++++++++++ index4.html | 95 +++++++++ js/.DS_Store | Bin 0 -> 6148 bytes js/effect-1/.DS_Store | Bin 0 -> 6148 bytes js/effect-1/index.js | 22 +++ js/effect-1/text-animator.js | 76 +++++++ js/effect-2/.DS_Store | Bin 0 -> 6148 bytes js/effect-2/index.js | 28 +++ js/effect-2/text-animator.js | 84 ++++++++ js/effect-3/.DS_Store | Bin 0 -> 6148 bytes js/effect-3/index.js | 22 +++ js/effect-3/text-animator.js | 76 +++++++ js/effect-4/.DS_Store | Bin 0 -> 6148 bytes js/effect-4/index.js | 28 +++ js/effect-4/text-animator.js | 84 ++++++++ js/gsap.min.js | 11 ++ js/split-type.min.js | 8 + js/textSplitter.js | 81 ++++++++ js/utils.js | 10 + 29 files changed, 1456 insertions(+) create mode 100644 .DS_Store create mode 100755 .gitignore create mode 100644 LICENSE create mode 100755 README.md create mode 100644 css/base.css create mode 100644 favicon.ico create mode 100644 img/bg.jpg create mode 100644 img/noise.png create mode 100644 index.html create mode 100644 index2.html create mode 100755 index3.html create mode 100644 index4.html create mode 100644 js/.DS_Store create mode 100644 js/effect-1/.DS_Store create mode 100644 js/effect-1/index.js create mode 100644 js/effect-1/text-animator.js create mode 100644 js/effect-2/.DS_Store create mode 100644 js/effect-2/index.js create mode 100644 js/effect-2/text-animator.js create mode 100644 js/effect-3/.DS_Store create mode 100644 js/effect-3/index.js create mode 100644 js/effect-3/text-animator.js create mode 100644 js/effect-4/.DS_Store create mode 100644 js/effect-4/index.js create mode 100644 js/effect-4/text-animator.js create mode 100644 js/gsap.min.js create mode 100644 js/split-type.min.js create mode 100644 js/textSplitter.js create mode 100644 js/utils.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..30bc7ec94fea8dc463b7128204dcee979a128b7d GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/img/bg.jpg b/img/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83f46c96c5b317a3fa696bb21e094300c3745912 GIT binary patch literal 60329 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�zCiPPQ zP!~gZfSf{r+$#%KRSlPBcIKVaVM^glSv*6WPcV$)YVyofmQx?Yz3Oj z_H^W!M0~O6n+9m(55ooBt=y*txkQTFrW8&VOAkzlLJso8}_JV zJ{RMrthA)h5mei%h&)vHe0w98DRr4kShINjE5=Y-LGCwi)RWA!$5q}^U-tp;4%fpf zcF^)|;L3*>|1L4PEx3iX+MJxJq$w;>;R4GL`3Yq-tDU1yT^-xt<4C|3RbHQ8etsV3 z<)rs*cJS@>9%5H1K6#D7LtbaWF{a{$KYo&Dy>HROhWVw35Dd7jr8}>o()HDmWJbMFLDb7-++4YD!3?6`y6n0{?f?Aip+PK6xZ^F9Ht6gOJnVOQsjQ*s{i9wI7A9r zuG9+cbjGKJA8Ri0SV6~g?12n!ey2!ul;Jk*(H^CxR&F&TE{>K zAL2HptEYpe8Mom3XM%Ix;lbE(dC1iH+Q{C4sCV-xyE%%eTL2~Lmb*E&+P#KnSyoRO z%YDcaz~CFE%r@<-Xjwliyfx9K9@m9*)Rs9eDOcb~!4bEJ$|5N{``%?dshMQ#0$Xwj zGhD|l{SrIpbCDq}*rK>+zY8axr*EVP_CGL<93s<_gZjHO3U)1{Yu4o`Vnaq5aYQy( zO1h8y=RN#LFsI@6ce61}Mivg!*Oj#i1^$k+QP`M^zqraHRpa!)zQvhqQq=zbfZTAA zyz%((HC9(YgT1Cw=iZG=<>eEfsi2>Z0De0Ee9PObjd^6dt1p|=aCb_NGjDryY`0_{ zAkqXN#{z2Sd8JZQfs?$Y%nw6Ch%7HCv>{5Lw^;FhYK`JYYJ6SREYiEONC3XumY8v= z{$oZdD&Pxc|FdM*QvzJPW2_Tb9 z-zmCXB($4^dtU1e;(!5Pg~iSfHf)Skh5*!)AI^h))e?tvCpVx$l1u$nyYe|yh2G-Q z!1;>y)2B{e+6|E*<~8B|=KfT7n5lR1g(QzACYaV?wo&I}g9M&rVu5BE8>E0rn-{(^ zWqTWU%pNkl0Od^FS2D4!Ep{iI$U5LkWbHj?8O_v%@hSHTbE~+`1iw>V3hTX-0}L%8 zu+TqiuTK{m->GT4-wi`uWC4!}lBpt_^yz4f-H^JzFZ}bz1=>QtQ`aHO->Rz~@Lnc}rPuKILyRSbb*5O{|!XhEFEG<%54nkUFiQ0S9TY$0BOl#O1-X{CbA&q$a zOeUvJhsn2oXzHR@XWoXAkGQPUy%fwO{p}shMPf~O{z%2nPB&+pv@;WQ7f{A?N!re1 zR!p$5_>J!khmExcDs9}6FY1Ii*IT_g06?JfbjN|P>@E3XxC_B(-&Ej6&D*1f@H(b7 zy_maH`9VlDim&bW;^tUSGx!|ul>g9;Ua3flAIs?pCwX`tIiGZka-ggW(H=UAV|7a1 ze;JV;f^p^LRF8*q6DPHUKFJdyzIhpsKTGTTo|jdeyvH$AY1D1{g7(WRYiY#H@Te_2 zWoShe^d3=}1%ZK%EWoGS*V>~RTeWLWcXx@xsJe;IK@{~YU8#`Y^RkVxU1klA_-8T{ zc1cX{>=9W!P_`m_Xi+n~KN7+u3>pHS&8_(M1ydc-I2COX=knYcsz=kPY9me6-3ZIy zl{oTRm2)3gJY;`#m0@WFnZ-G~Aw8}1Qj}iVe5rf6x2NHh1@Xd2z=A=?MALMWUUd4o zDGR7ZY<}fx0Uuyi8}}KxwOQ@7V7uN@?6{=ry!v0FNSbkvO^Gy#vXIOj$*R5lSY{(A zM(8Q+{Mu#Hp^GDc?Bf*b7V)&k^jo=>qYMfW!$2l)wA(I)i@*#MZkWre*H%vGY=95; zi4}JkD|u#pHet`*I~rf0d8O1Pk}+evM%!2r4%UF?8d@_;vCu5m5V&ep1FmzCPpvCn ziUf`wwqYE3>8C7w++pP!vVe*#?HGa(O%o2C{^R?QYc2|1@Na_Vf^Lx9mJpQRWJ-P-!;%LE*8V*1loO zqMI4TtlW^jX7p#jz)GV}e$2TBFNE6GD=Gk^G#8uIWw>EqBKoI+zVc4Dtwj=c*>lFQ zd2=Uo#iKk+qla{BBvTn$TCcnyzN{R*h5GPq9!XT4MY5hLj8P^D-=0HnyqeIB=GwNW z&B$+5lYTG!1h>6k(*B0r)F|4&DxjHsTgWN{a?8E-HZr*E8i3@f3sJ%{io7rbwbdP8 zL}T>PY$nv4`#+RinE3EhiUfIwbuB@#oCPfGaKK5<_}U-A zToygK)sJ#>*D{LS2s{yR zDW@NinJ3RR$BH^PMf;=18-I4w_08FL1=s8 + + + + + Line Text Hover Animations | Demo 1 | Codrops + + + + + + + + + + + + +
+
+

#Hover Animations on Line #Typography

+ Article + All demos + GitHub + +
+
+

Client Projects 2043

+
    +
  • + Mount Vespera + Planet Thalassa + 2157-03-14 + 6 +
  • +
  • + Kraxion + Exo-Planet Zyra + 2243-11-09 + 7 +
  • +
  • + Helion Peak + Planet Elara + 2180-05-18 + 5 +
  • +
  • + Pyrosphere + Moon Xanthe + 2291-06-15 + 6 +
  • +
  • + Vulcanus + Asteroid B-612 + 2312-08-22 + 5 +
  • +
  • + Tarkon's Fury + Planet Drakonis + 2455-12-01 + 8 +
  • +
  • + Aether Plume + Planet Ganymede + 2379-04-10 + 4 +
  • +
  • + Mount Zenith + Planet Lumina + 2392-09-21 + 6 +
  • +
  • + Inferno Crest + Moon Rhea + 2410-03-08 + 5 +
  • +
  • + Jacob's Hill + Exoplanet HU5 + 2205-12-09 + 7 +
  • +
+

Event Codes

+
    +
  • + 2178-04-21 + 2190-07-16 + X7 + 2205-12-08 +
  • +
  • + 2234-02-11 + 2241-09-25 + A5 + 2253-01-30 +
  • +
  • + 2301-06-17 + 2312-03-05 + B9 + 2320-08-14 +
  • +
  • + 2404-11-19 + 2415-07-22 + L0 + 2428-05-29 +
  • +
+
+
+ + + + + + + + + + + + diff --git a/index2.html b/index2.html new file mode 100644 index 0000000..0e03e22 --- /dev/null +++ b/index2.html @@ -0,0 +1,137 @@ + + + + + + Line Text Hover Animations | Demo 2 | Codrops + + + + + + + + + + + + +
+
+

#Hover Animations on Line #Typography

+ Article + All demos + GitHub + +
+
+

Client Projects 2043

+
    +
  • + Mount Vespera + Planet Thalassa + 2157-03-14 + 6 +
  • +
  • + Kraxion + Exo-Planet Zyra + 2243-11-09 + 7 +
  • +
  • + Helion Peak + Planet Elara + 2180-05-18 + 5 +
  • +
  • + Pyrosphere + Moon Xanthe + 2291-06-15 + 6 +
  • +
  • + Vulcanus + Asteroid B-612 + 2312-08-22 + 5 +
  • +
  • + Tarkon's Fury + Planet Drakonis + 2455-12-01 + 8 +
  • +
  • + Aether Plume + Planet Ganymede + 2379-04-10 + 4 +
  • +
  • + Mount Zenith + Planet Lumina + 2392-09-21 + 6 +
  • +
  • + Inferno Crest + Moon Rhea + 2410-03-08 + 5 +
  • +
  • + Jacob's Hill + Exoplanet HU5 + 2205-12-09 + 7 +
  • +
+

Event Codes

+
    +
  • + 2178-04-21 + 2190-07-16 + X7 + 2205-12-08 +
  • +
  • + 2234-02-11 + 2241-09-25 + A5 + 2253-01-30 +
  • +
  • + 2301-06-17 + 2312-03-05 + B9 + 2320-08-14 +
  • +
  • + 2404-11-19 + 2415-07-22 + L0 + 2428-05-29 +
  • +
+
+
+ + + + + + + + + + + + diff --git a/index3.html b/index3.html new file mode 100755 index 0000000..0e9efbf --- /dev/null +++ b/index3.html @@ -0,0 +1,135 @@ + + + + + + Line Text Hover Animations | Demo 3 | Codrops + + + + + + + + + + + + +
+
+

#Hover Animations on Line #Typography

+ Article + All demos + GitHub + +
+
+

Volcanic Eruptions

+
    +
  • + Mount Vespera + Planet Thalassa + 2157-03-14 + 6 +
  • +
  • + Kraxion + Exo-Planet Zyra + 2243-11-09 + 7 +
  • +
  • + Helion Peak + Planet Elara + 2180-05-18 + 5 +
  • +
  • + Pyrosphere + Moon Xanthe + 2291-06-15 + 6 +
  • +
  • + Vulcanus + Asteroid B-612 + 2312-08-22 + 5 +
  • +
  • + Tarkon's Fury + Planet Drakonis + 2455-12-01 + 8 +
  • +
  • + Aether Plume + Planet Ganymede + 2379-04-10 + 4 +
  • +
  • + Mount Zenith + Planet Lumina + 2392-09-21 + 6 +
  • +
  • + Inferno Crest + Moon Rhea + 2410-03-08 + 5 +
  • +
  • + Jacob's Hill + Exoplanet HU5 + 2205-12-09 + 7 +
  • +
+

Event Codes

+
    +
  • + 2178-04-21 + 2190-07-16 + X7 + 2205-12-08 +
  • +
  • + 2234-02-11 + 2241-09-25 + A5 + 2253-01-30 +
  • +
  • + 2301-06-17 + 2312-03-05 + B9 + 2320-08-14 +
  • +
  • + 2404-11-19 + 2415-07-22 + L0 + 2428-05-29 +
  • +
+
+
+ + + + + + + + + + diff --git a/index4.html b/index4.html new file mode 100644 index 0000000..54c529a --- /dev/null +++ b/index4.html @@ -0,0 +1,95 @@ + + + + + + Line Text Hover Animations | Demo 4 | Codrops + + + + + + + + + + + + +
+
+

#Hover Animations on Line #Typography

+ Article + All demos + GitHub + +
+
+

The Twwins Intergalactic Tour 2045

+
    +
  • + Solaris Dome + Planet Vespera + 2045-01-21 +
  • +
  • + N7 Amphitheater + Exo-Planet Zyra + 2045-02-14 +
  • +
  • + Titan Orbit Arena + Planet Elara + 2045-03-30 +
  • +
  • + Io Lunar Hall + Moon Xanthe + 2045-04-25 +
  • +
  • + Helios Grand Stage + Asteroid B-612 + 2045-05-19 +
  • +
  • + AE Concert Hall + Delta X9 + 2045-06-10 +
  • +
  • + Nova Prime Pavilion + Planet Ganymede + 2045-07-04 +
  • +
  • + Galaxy's Edge Theater + Orion Station N3 + 2045-08-21 +
  • +
  • + Starlight Auditorium + Moon Rhea + 2045-09-10 +
  • +
+
+
+ + + + + + + + + + + + diff --git a/js/.DS_Store b/js/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0G6w%?BdKrOrsnc$N{F znj?T5Vi1r*HWN*bugHKrI|up@Ko?K$-T8%stP>_8#POG~lf+rRx%tXUOXVNSE0*Or z&M)WEZ;64Q2YD~61>JMmI}Y+zXzUXql8GIJr*U)8sH`4{G!Npm*;UDL)WndBvp9{! zpeA~0l&N`qJz!b3Z8s|G!{OGS-70st_C{4c+;iP3-`UQrV*45ri3&rO_Xu+XT}ftliinU$HTP?%aB=jSRMn5U6i zVt^Q!W?)HoEAst6oL~P>CsB_WAO^k_1FT&4>owexd0S^TC*N9*dW9-Q#uXYTDQKvt h7-QvAypE~_{ahM|p20#RdQj+(fTDpKV&GF5cmpAWcw+zn literal 0 HcmV?d00001 diff --git a/js/effect-1/index.js b/js/effect-1/index.js new file mode 100644 index 0000000..614b6ad --- /dev/null +++ b/js/effect-1/index.js @@ -0,0 +1,22 @@ +import { TextAnimator } from './text-animator.js'; + +const init = () => { + document.querySelectorAll('.list__item').forEach(item => { + const cols = Array.from(item.querySelectorAll('.hover-effect')); + const animators = cols.map(col => new TextAnimator(col)); + + item.addEventListener('mouseenter', () => { + animators.forEach(animator => animator.animate()); + }); + }); + + // Same for all links + document.querySelectorAll('a.hover-effect').forEach(item => { + const animator = new TextAnimator(item); + item.addEventListener('mouseenter', () => { + animator.animate(); + }); + }); +}; + +init(); \ No newline at end of file diff --git a/js/effect-1/text-animator.js b/js/effect-1/text-animator.js new file mode 100644 index 0000000..f1b26cc --- /dev/null +++ b/js/effect-1/text-animator.js @@ -0,0 +1,76 @@ +// Import the TextSplitter class for handling text splitting. +import { TextSplitter } from '../textSplitter.js'; + +const lettersAndSymbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '!', '@', '#', '$', '%', '^', '&', '*', '-', '_', '+', '=', ';', ':', '<', '>', ',']; + +// Defines a class to create hover effects on text. +export class TextAnimator { + constructor(textElement) { + // Check if the provided element is valid. + if (!textElement || !(textElement instanceof HTMLElement)) { + throw new Error('Invalid text element provided.'); + } + + this.textElement = textElement; + this.splitText(); + } + + splitText() { + // Split text for animation and store the reference. + this.splitter = new TextSplitter(this.textElement, { + splitTypeTypes: 'words, chars' + }); + + // Save the initial state of each character + this.originalChars = this.splitter.getChars().map(char => char.innerHTML); + } + + animate() { + // Reset any ongoing animations + this.reset(); + + // Query all individual characters in the line for animation. + const chars = this.splitter.getChars(); + + chars.forEach((char, position) => { + let initialHTML = char.innerHTML; + let repeatCount = 0; + + gsap.fromTo(char, { + opacity: 0 + }, + { + duration: 0.03, + onStart: () => { + // Set --opa to 1 at the start of the animation + gsap.set(char, { '--opa': 1 }); + }, + onComplete: () => { + gsap.set(char, {innerHTML: initialHTML, delay: 0.03}) + }, + repeat: 3, + onRepeat: () => { + repeatCount++; + if (repeatCount === 1) { + // Set --opa to 0 after the first repeat + gsap.set(char, { '--opa': 0 }); + } + }, + repeatRefresh: true, + repeatDelay: 0.04, + delay: (position+1)*0.07, + innerHTML: () => lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)], + opacity: 1 + }); + }); + } + + reset() { + // Reset the text to its original state + const chars = this.splitter.getChars(); + chars.forEach((char, index) => { + gsap.killTweensOf(char); // Ensure no ongoing animations + char.innerHTML = this.originalChars[index]; + }); + } +} diff --git a/js/effect-2/.DS_Store b/js/effect-2/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..649f1d2ebda033176865f71572a5ea297241b9fb GIT binary patch literal 6148 zcmeHK%}(Pm5FVEG6w%?BdKrOrsnc$N{F znj?T5Vi1r*HWN*bugHKrI|up@Ko?K$-T8%stP>_8#POG~lf+rRx%tXUOXVNSE0*Or z&M)WEZ;64Q2YD~61>JMmI}Y+zXzUXql8GIJr*U)8sH`4{G!Npm*;UDL)WndBvp9{! zpeA~0l&N`qJz!b3Z8s|G!{OGS-70st_C{4c+;iP3-`UQrV*45ri3&rO_Xu+XT}ftliinU$HTP?%aB=jSRMn5U6i zVt^Q!W?)HoEAst6oL~P>CsB_WAO^k_1FT&4>owexd0S^TC*N9*dW9-Q#uXYTDQKvt h7-QvAypE~_{ahM|p20#RdQj+(fTDpKV&GF5cmpAWcw+zn literal 0 HcmV?d00001 diff --git a/js/effect-2/index.js b/js/effect-2/index.js new file mode 100644 index 0000000..226d04a --- /dev/null +++ b/js/effect-2/index.js @@ -0,0 +1,28 @@ +import { TextAnimator } from './text-animator.js'; + +const init = () => { + document.querySelectorAll('.list__item').forEach(item => { + const cols = Array.from(item.querySelectorAll('.hover-effect')); + const animators = cols.map(col => new TextAnimator(col)); + + item.addEventListener('mouseenter', () => { + animators.forEach(animator => animator.animate()); + }); + item.addEventListener('mouseleave', () => { + animators.forEach(animator => animator.animateBack()); + }); + }); + + // Same for all links + document.querySelectorAll('a.hover-effect').forEach(item => { + const animator = new TextAnimator(item); + item.addEventListener('mouseenter', () => { + animator.animate(); + }); + item.addEventListener('mouseleave', () => { + animator.animateBack(); + }); + }); +}; + +init(); \ No newline at end of file diff --git a/js/effect-2/text-animator.js b/js/effect-2/text-animator.js new file mode 100644 index 0000000..054026d --- /dev/null +++ b/js/effect-2/text-animator.js @@ -0,0 +1,84 @@ +// Import the TextSplitter class for handling text splitting. +import { TextSplitter } from '../textSplitter.js'; + +const lettersAndSymbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '!', '@', '#', '$', '%', '^', '&', '*', '-', '_', '+', '=', ';', ':', '<', '>', ',']; + +// Defines a class to create hover effects on text. +export class TextAnimator { + constructor(textElement) { + // Check if the provided element is valid. + if (!textElement || !(textElement instanceof HTMLElement)) { + throw new Error('Invalid text element provided.'); + } + + this.textElement = textElement; + this.originalChars = []; // Store the original characters + this.splitText(); + } + + splitText() { + // Split text for animation and store the reference. + this.splitter = new TextSplitter(this.textElement, { + splitTypeTypes: 'words, chars' + }); + + // Save the initial state of each character + this.originalChars = this.splitter.getChars().map(char => char.innerHTML); + } + + animate() { + // Reset any ongoing animations + this.reset(); + + // Query all individual characters in the line for animation. + const chars = this.splitter.getChars(); + + chars.forEach((char, position) => { + let initialHTML = char.innerHTML; + + gsap.fromTo(char, { + opacity: 0 + }, + { + duration: 0.03, + onComplete: () => gsap.set(char, { innerHTML: initialHTML, delay: 0.1 }), + repeat: 2, + repeatRefresh: true, + repeatDelay: 0.05, // delay between repeats + delay: (position + 1) * 0.06, // delay between chars + innerHTML: () => lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)], + opacity: 1 + }); + }); + + gsap.fromTo(this.textElement, { + '--anim': 0 + }, + { + duration: 1, + ease: 'expo', + '--anim': 1 + }); + } + + animateBack() { + gsap.killTweensOf(this.textElement); // Ensure no ongoing animations + gsap.to(this.textElement, { + duration: .6, + ease: 'power4', + '--anim': 0 + }); + } + + reset() { + // Reset the text to its original state + const chars = this.splitter.getChars(); + chars.forEach((char, index) => { + gsap.killTweensOf(char); // Ensure no ongoing animations + char.innerHTML = this.originalChars[index]; + }); + + gsap.killTweensOf(this.textElement); + gsap.set(this.textElement, {'--anim': 0}); + } +} diff --git a/js/effect-3/.DS_Store b/js/effect-3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..649f1d2ebda033176865f71572a5ea297241b9fb GIT binary patch literal 6148 zcmeHK%}(Pm5FVEG6w%?BdKrOrsnc$N{F znj?T5Vi1r*HWN*bugHKrI|up@Ko?K$-T8%stP>_8#POG~lf+rRx%tXUOXVNSE0*Or z&M)WEZ;64Q2YD~61>JMmI}Y+zXzUXql8GIJr*U)8sH`4{G!Npm*;UDL)WndBvp9{! zpeA~0l&N`qJz!b3Z8s|G!{OGS-70st_C{4c+;iP3-`UQrV*45ri3&rO_Xu+XT}ftliinU$HTP?%aB=jSRMn5U6i zVt^Q!W?)HoEAst6oL~P>CsB_WAO^k_1FT&4>owexd0S^TC*N9*dW9-Q#uXYTDQKvt h7-QvAypE~_{ahM|p20#RdQj+(fTDpKV&GF5cmpAWcw+zn literal 0 HcmV?d00001 diff --git a/js/effect-3/index.js b/js/effect-3/index.js new file mode 100644 index 0000000..614b6ad --- /dev/null +++ b/js/effect-3/index.js @@ -0,0 +1,22 @@ +import { TextAnimator } from './text-animator.js'; + +const init = () => { + document.querySelectorAll('.list__item').forEach(item => { + const cols = Array.from(item.querySelectorAll('.hover-effect')); + const animators = cols.map(col => new TextAnimator(col)); + + item.addEventListener('mouseenter', () => { + animators.forEach(animator => animator.animate()); + }); + }); + + // Same for all links + document.querySelectorAll('a.hover-effect').forEach(item => { + const animator = new TextAnimator(item); + item.addEventListener('mouseenter', () => { + animator.animate(); + }); + }); +}; + +init(); \ No newline at end of file diff --git a/js/effect-3/text-animator.js b/js/effect-3/text-animator.js new file mode 100644 index 0000000..9465a4c --- /dev/null +++ b/js/effect-3/text-animator.js @@ -0,0 +1,76 @@ +// Import the TextSplitter class for handling text splitting. +import { TextSplitter } from '../textSplitter.js'; + +const lettersAndSymbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '!', '@', '#', '$', '%', '^', '&', '*', '-', '_', '+', '=', ';', ':', '<', '>', ',']; +const randomColors = ['#22a3a9', '#4ca922', '#a99222', '#1d2619']; // Example colors + +// Defines a class to create hover effects on text. +export class TextAnimator { + constructor(textElement) { + // Check if the provided element is valid. + if (!textElement || !(textElement instanceof HTMLElement)) { + throw new Error('Invalid text element provided.'); + } + + this.textElement = textElement; + this.originalChars = []; // Store the original characters + this.splitText(); + } + + splitText() { + // Split text for animation and store the reference. + this.splitter = new TextSplitter(this.textElement, { + splitTypeTypes: 'words, chars' + }); + + // Save the initial state of each character + this.originalChars = this.splitter.getChars().map(char => char.innerHTML); + this.originalColors = this.splitter.getChars().map(char => getComputedStyle(char).color); + } + + animate() { + // Reset any ongoing animations + this.reset(); + + // Query all individual characters in the line for animation. + const chars = this.splitter.getChars(); + + chars.forEach((char, position) => { + let initialHTML = char.innerHTML; + let initialColor = getComputedStyle(char).color; + + gsap + .timeline() + .fromTo(char, { + opacity: 0, + transformOrigin: '50% 0%' + }, + { + duration: 0.03, + ease: 'none', + onComplete: () => gsap.set(char, { innerHTML: initialHTML, color: initialColor, delay: 0.03 }), + repeat: 3, + repeatRefresh: true, + repeatDelay: 0.1, // delay between repeats + delay: (position + 1) * 0.08, // delay between chars + innerHTML: () => { + const randomChar = lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)]; + const randomColor = randomColors[Math.floor(Math.random() * randomColors.length)]; + gsap.set(char, { color: randomColor }); + return randomChar; + }, + opacity: 1 + }) + }); + } + + reset() { + // Reset the text to its original state + const chars = this.splitter.getChars(); + chars.forEach((char, index) => { + gsap.killTweensOf(char); // Ensure no ongoing animations + char.innerHTML = this.originalChars[index]; + char.style.color = this.originalColors[index]; // Reset the color + }); + } +} diff --git a/js/effect-4/.DS_Store b/js/effect-4/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..649f1d2ebda033176865f71572a5ea297241b9fb GIT binary patch literal 6148 zcmeHK%}(Pm5FVEG6w%?BdKrOrsnc$N{F znj?T5Vi1r*HWN*bugHKrI|up@Ko?K$-T8%stP>_8#POG~lf+rRx%tXUOXVNSE0*Or z&M)WEZ;64Q2YD~61>JMmI}Y+zXzUXql8GIJr*U)8sH`4{G!Npm*;UDL)WndBvp9{! zpeA~0l&N`qJz!b3Z8s|G!{OGS-70st_C{4c+;iP3-`UQrV*45ri3&rO_Xu+XT}ftliinU$HTP?%aB=jSRMn5U6i zVt^Q!W?)HoEAst6oL~P>CsB_WAO^k_1FT&4>owexd0S^TC*N9*dW9-Q#uXYTDQKvt h7-QvAypE~_{ahM|p20#RdQj+(fTDpKV&GF5cmpAWcw+zn literal 0 HcmV?d00001 diff --git a/js/effect-4/index.js b/js/effect-4/index.js new file mode 100644 index 0000000..226d04a --- /dev/null +++ b/js/effect-4/index.js @@ -0,0 +1,28 @@ +import { TextAnimator } from './text-animator.js'; + +const init = () => { + document.querySelectorAll('.list__item').forEach(item => { + const cols = Array.from(item.querySelectorAll('.hover-effect')); + const animators = cols.map(col => new TextAnimator(col)); + + item.addEventListener('mouseenter', () => { + animators.forEach(animator => animator.animate()); + }); + item.addEventListener('mouseleave', () => { + animators.forEach(animator => animator.animateBack()); + }); + }); + + // Same for all links + document.querySelectorAll('a.hover-effect').forEach(item => { + const animator = new TextAnimator(item); + item.addEventListener('mouseenter', () => { + animator.animate(); + }); + item.addEventListener('mouseleave', () => { + animator.animateBack(); + }); + }); +}; + +init(); \ No newline at end of file diff --git a/js/effect-4/text-animator.js b/js/effect-4/text-animator.js new file mode 100644 index 0000000..054026d --- /dev/null +++ b/js/effect-4/text-animator.js @@ -0,0 +1,84 @@ +// Import the TextSplitter class for handling text splitting. +import { TextSplitter } from '../textSplitter.js'; + +const lettersAndSymbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '!', '@', '#', '$', '%', '^', '&', '*', '-', '_', '+', '=', ';', ':', '<', '>', ',']; + +// Defines a class to create hover effects on text. +export class TextAnimator { + constructor(textElement) { + // Check if the provided element is valid. + if (!textElement || !(textElement instanceof HTMLElement)) { + throw new Error('Invalid text element provided.'); + } + + this.textElement = textElement; + this.originalChars = []; // Store the original characters + this.splitText(); + } + + splitText() { + // Split text for animation and store the reference. + this.splitter = new TextSplitter(this.textElement, { + splitTypeTypes: 'words, chars' + }); + + // Save the initial state of each character + this.originalChars = this.splitter.getChars().map(char => char.innerHTML); + } + + animate() { + // Reset any ongoing animations + this.reset(); + + // Query all individual characters in the line for animation. + const chars = this.splitter.getChars(); + + chars.forEach((char, position) => { + let initialHTML = char.innerHTML; + + gsap.fromTo(char, { + opacity: 0 + }, + { + duration: 0.03, + onComplete: () => gsap.set(char, { innerHTML: initialHTML, delay: 0.1 }), + repeat: 2, + repeatRefresh: true, + repeatDelay: 0.05, // delay between repeats + delay: (position + 1) * 0.06, // delay between chars + innerHTML: () => lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)], + opacity: 1 + }); + }); + + gsap.fromTo(this.textElement, { + '--anim': 0 + }, + { + duration: 1, + ease: 'expo', + '--anim': 1 + }); + } + + animateBack() { + gsap.killTweensOf(this.textElement); // Ensure no ongoing animations + gsap.to(this.textElement, { + duration: .6, + ease: 'power4', + '--anim': 0 + }); + } + + reset() { + // Reset the text to its original state + const chars = this.splitter.getChars(); + chars.forEach((char, index) => { + gsap.killTweensOf(char); // Ensure no ongoing animations + char.innerHTML = this.originalChars[index]; + }); + + gsap.killTweensOf(this.textElement); + gsap.set(this.textElement, {'--anim': 0}); + } +} diff --git a/js/gsap.min.js b/js/gsap.min.js new file mode 100644 index 0000000..14dd0a4 --- /dev/null +++ b/js/gsap.min.js @@ -0,0 +1,11 @@ +/*! + * GSAP 3.12.5 + * https://gsap.com + * + * @license Copyright 2024, GreenSock. All rights reserved. + * Subject to the terms at https://gsap.com/standard-license or for Club GSAP members, the agreement issued with that membership. + * @author: Jack Doyle, jack@greensock.com + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t){return"string"==typeof t}function s(t){return"function"==typeof t}function t(t){return"number"==typeof t}function u(t){return void 0===t}function v(t){return"object"==typeof t}function w(t){return!1!==t}function x(){return"undefined"!=typeof window}function y(t){return s(t)||r(t)}function P(t){return(i=yt(t,ot))&&ze}function Q(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function R(t,e){return!e&&console.warn(t)}function S(t,e){return t&&(ot[t]=e)&&i&&(i[t]=e)||ot}function T(){return 0}function ea(t){var e,r,i=t[0];if(v(i)||s(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=gt.length;r--&&!gt[r].targetTest(i););e=gt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Vt(t[r],e)))||t.splice(r,1);return t}function fa(t){return t._gsap||ea(Mt(t))[0]._gsap}function ga(t,e,r){return(r=t[e])&&s(r)?t[e]():u(r)&&t.getAttribute&&t.getAttribute(e)||r}function ha(t,e){return(t=t.split(",")).forEach(e)||t}function ia(t){return Math.round(1e5*t)/1e5||0}function ja(t){return Math.round(1e7*t)/1e7||0}function ka(t,e){var r=e.charAt(0),i=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+i:"-"===r?t-i:"*"===r?t*i:t/i}function la(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++ia;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function ya(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function za(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Aa(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Ca(t,e,r,i){return t._startAt&&(L?t._startAt.revert(ht):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Ea(t){return t._repeat?Tt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ga(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ha(t){return t._end=ja(t._start+(t._tDur/Math.abs(t._ts||t._rts||X)||0))}function Ia(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ja(r._time-(0X)&&e.render(r,!0)),Aa(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur(n=Math.abs(n))&&(a=i,o=n);return a}function tb(t){return za(t),t.scrollTrigger&&t.scrollTrigger.kill(!!L),t.progress()<1&&Ct(t,"onInterrupt"),t}function wb(t){if(t)if(t=!t.name&&t.default||t,x()||t.headless){var e=t.name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:T,render:he,add:Wt,kill:ce,modifier:fe,rawVars:0},a={targetTest:0,get:0,getSetter:ne,aliases:{},register:0};if(Ft(),t!==i){if(pt[e])return;qa(i,qa(ua(t,n),a)),yt(i.prototype,yt(n,ua(t,a))),pt[i.prop=e]=i,t.targetTest&&(gt.push(i),ft[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}S(e,i),t.register&&t.register(ze,i,_e)}else At.push(t)}function zb(t,e,r){return(6*(t+=t<0?1:1>16,e>>8&St,e&St]:0:zt.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),zt[e])p=zt[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&St,p&St,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&St,e&St]}else if("hsl"===e.substr(0,3))if(p=c=e.match(tt),r){if(~e.indexOf("="))return p=e.match(et),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3=U?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*(Z(i)?i[0]:i).totalDuration()),1=r&&te)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0=i&&(a instanceof $t?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(ya(this,t),t===this._recent&&(this._recent=this._last),Aa(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ja(Rt.time-(0r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=xt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=$t.to(i,qa({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||X,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Ra(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,qa({startAt:{time:xt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+X)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Aa(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Aa(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=U;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,Ka(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Ra(a,a===I&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(I._ts&&(na(I,Ga(t,I)),f=Rt.frame),Rt.frame>=mt){mt+=q.autoSleep||120;var e=I._first;if((!e||!e._ts)&&q.autoSleep&&Rt._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Rt.sleep()}}},Timeline}(Ut);qa(Xt.prototype,{_lock:0,_hasPause:0,_forcing:0});function ac(t,e,i,n,a,o){var u,h,l,f;if(pt[t]&&!1!==(u=new pt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Kt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||Z(t)||$(t))return r(t)?Kt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Kt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new _e(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==d))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function gc(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if(Z(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Nt,Gt,Wt=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var d,c=t[e],p="get"!==i?i:s(c)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():c,_=s(c)?l?re:te:Zt;if(r(n)&&(~n.indexOf("random(")&&(n=ob(n)),"="===n.charAt(1)&&(!(d=ka(p,n)+(Ya(p)||0))&&0!==d||(n=d))),!f||p!==n||Gt)return isNaN(p*n)||""===n?(c||e in t||Q(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,d,c,p,_=new _e(this._pt,t,e,0,1,ue,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(c=~(i+="").indexOf("random("))&&(i=ob(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(d=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:d,c:"="===l.charAt(1)?ka(d,l)-d:parseFloat(l)-d,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m")}),s.duration();else{for(l in u={},x)"ease"===l||"easeEach"===l||gc(l,x[l],u,x.easeEach);for(l in u)for(A=u[l].sort(function(t,e){return t.t-e.t}),o=E=0;o=t._tDur||e<0)&&t.ratio===u&&(u&&za(t,1),r||L||(Ct(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),D.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i,n){c||Rt.wake(),this._ts||this.play();var a,s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Qt(this,s),a=this._ease(s/this._dur),function _updatePropTweens(t,e,r,i,n,a,s,o){var u,h,l,f,d=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!d)for(d=t._ptCache[e]=[],l=t._ptLookup,f=t._targets.length;f--;){if((u=l[f][e])&&u.d&&u.d._pt)for(u=u.d._pt;u&&u.p!==e&&u.fp!==e;)u=u._next;if(!u)return Gt=1,t.vars[e]="+=0",Qt(t,s),Gt=0,o?R(e+" not eligible for reset"):1;d.push(u)}for(f=d.length;f--;)(u=(h=d[f])._pt||h).s=!i&&0!==i||n?u.s+(i||0)+a*u.c:i,u.c=r-u.s,h.e&&(h.e=ia(r)+Ya(h.e)),h.b&&(h.b=u.s+Ya(h.b))}(this,t,e,r,i,a,s,n)?this.resetTo(t,e,r,i,1):(Ia(this,0),this.parent||xa(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?tb(this):this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Nt&&!0!==Nt.vars.overwrite)._first||tb(this),this.parent&&i!==this.timeline.totalDuration()&&Ra(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,d=t?Mt(t):f,c=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,d))return"all"===e&&(this._pt=0),tb(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ha(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?fa(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=yt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~d.indexOf(f[l]))for(u in a=c[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||ya(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&tb(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Va(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Va(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return I.killTweensOf(t,e,r)},Tween}(Ut);qa($t.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ha("staggerTo,staggerFrom,staggerFromTo",function(r){$t[r]=function(){var t=new Xt,e=kt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function oc(t,e,r){return t.setAttribute(e,r)}function wc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var Zt=function _setterPlain(t,e,r){return t[e]=r},te=function _setterFunc(t,e,r){return t[e](r)},re=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ne=function _getSetter(t,e){return s(t[e])?te:u(t[e])&&t.setAttribute?oc:Zt},ae=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},se=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},ue=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},he=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},fe=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},ce=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?ya(this,i,"_pt"):i.dep||(e=1),i=r;return!e},pe=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},_e=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=wc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||ae,this.d=s||this,this.set=o||Zt,this.pr=u||0,(this._next=t)&&(t._prev=this)}ha(vt+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(t){return ft[t]=1}),ot.TweenMax=ot.TweenLite=$t,ot.TimelineLite=ot.TimelineMax=Xt,I=new Xt({sortChildren:!1,defaults:V,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),q.stringFilter=Fb;function Ec(t){return(ye[t]||Te).map(function(t){return t()})}function Fc(){var t=Date.now(),o=[];2 + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).SplitType=e()}(this,(function(){"use strict";function t(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},n=l(e);return void 0!==n.types?t=n.types:void 0!==n.split&&(t=n.split),void 0!==t&&(n.types=(u(t)||f(t)?String(t):"").split(",").map((function(t){return String(t).trim()})).filter((function(t){return/((line)|(word)|(char))/i.test(t)}))),(n.absolute||n.position)&&(n.absolute=n.absolute||/absolute/.test(e.position)),n}function d(t){var e=u(t)||f(t)?String(t):"";return{none:!e,lines:/line/i.test(e),words:/word/i.test(e),chars:/char/i.test(e)}}function h(t){return null!==t&&"object"==typeof t}function y(t){return h(t)&&/^(1|3|11)$/.test(t.nodeType)}function g(t){return f(t)?t:null==t?[]:function(t){return h(t)&&function(t){return"number"==typeof t&&t>-1&&t%1==0}(t.length)}(t)?Array.prototype.slice.call(t):[t]}function v(t){var e=t;return u(t)&&(e=/^(#[a-z]\w+)$/.test(t.trim())?document.getElementById(t.trim().slice(1)):document.querySelectorAll(t)),g(e).reduce((function(t,e){return[].concat(a(t),a(g(e).filter(y)))}),[])}!function(){function t(){for(var t=arguments.length,e=0;e1&&void 0!==arguments[1]?arguments[1]:" ";return(t?String(t):"").trim().replace(/\s+/g," ").split(e)}(i).reduce((function(t,n,i,l){var f,p;return r.chars&&(p=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return(t=U(t))&&u(t)&&!e&&V(t)?q(t):t.split(e)}(n).map((function(t){var n=X(o,{class:"".concat(e.splitClass," ").concat(e.charClass),style:"display: inline-block;",children:t});return j(n,"isChar",!0),s=[].concat(a(s),[n]),n}))),r.words||r.lines?(j(f=X(o,{class:"".concat(e.wordClass," ").concat(e.splitClass),style:"display: inline-block; ".concat(r.words&&e.absolute?"position: relative;":""),children:r.chars?p:n}),{isWord:!0,isWordStart:!0,isWordEnd:!0}),c.appendChild(f)):p.forEach((function(t){c.appendChild(t)})),i=O)&&(p=d,u.push(f=[])),f.push(r)),e.absolute&&j(r,{top:d,left:h,width:s,height:l}))})),y&&y.removeChild(t),c.lines&&(h=u.map((function(t){var n=X(s,{class:"".concat(e.splitClass," ").concat(e.lineClass),style:"display: block; text-align: ".concat(w,"; width: 100%;")});j(n,"isLine",!0);var r={height:0,top:1e4};return m.appendChild(n),t.forEach((function(t,e,o){var i=C(t),a=i.isWordEnd,c=i.top,s=i.height,l=o[e+1];r.height=Math.max(r.height,s),r.top=Math.min(r.top,c),n.appendChild(t),a&&C(l).isWordStart&&n.append(" ")})),e.absolute&&j(n,{height:r.height,top:r.top}),n})),c.words||J(m),t.replaceChildren(m)),e.absolute&&(t.style.width="".concat(t.style.width||o,"px"),t.style.height="".concat(r,"px"),g(l).forEach((function(t){var e=C(t),n=e.isLine,r=e.top,o=e.left,i=e.width,c=e.height,s=C(t.parentElement),l=!n&&s.isLine;t.style.top="".concat(l?r-s.top:r,"px"),t.style.left="".concat(n?a.left:o-(l?a.left:0),"px"),t.style.height="".concat(c,"px"),t.style.width="".concat(n?a.width:i,"px"),t.style.position="absolute"}))),y&&(v?y.insertBefore(t,v):y.appendChild(t)),h}var Q=l(Y,{});return function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.isSplit=!1,this.settings=l(Q,p(n)),this.elements=v(e),this.split()}return e(t,null,[{key:"clearData",value:function(){Object.keys(w).forEach((function(t){delete w[t]}))}},{key:"setDefaults",value:function(t){return Q=l(Q,p(t)),Y}},{key:"revert",value:function(t){v(t).forEach((function(t){var e=C(t),n=e.isSplit,r=e.html,o=e.cssWidth,i=e.cssHeight;n&&(t.innerHTML=r,t.style.width=o||"",t.style.height=i||"",E(t))}))}},{key:"create",value:function(e,n){return new t(e,n)}},{key:"data",get:function(){return w}},{key:"defaults",get:function(){return Q},set:function(t){Q=l(Q,p(t))}}]),e(t,[{key:"split",value:function(t){var e=this;this.revert(),this.elements.forEach((function(t){j(t,"html",t.innerHTML)})),this.lines=[],this.words=[],this.chars=[];var n=[window.pageXOffset,window.pageYOffset];void 0!==t&&(this.settings=l(this.settings,p(t)));var r=d(this.settings.types);r.none||(this.elements.forEach((function(t){j(t,"isRoot",!0);var n=G(t,e.settings),r=n.words,o=n.chars;e.words=[].concat(a(e.words),a(r)),e.chars=[].concat(a(e.chars),a(o))})),this.elements.forEach((function(t){if(r.lines||e.settings.absolute){var o=K(t,e.settings,n);e.lines=[].concat(a(e.lines),a(o))}})),this.isSplit=!0,window.scrollTo(n[0],n[1]),m(w).forEach((function(t){var e=i(t,2),n=e[0],r=e[1],o=r.isRoot,a=r.isSplit;o&&a||(w[n]=null,delete w[n])})))}},{key:"revert",value:function(){this.isSplit&&(this.lines=null,this.words=null,this.chars=null,this.isSplit=!1),t.revert(this.elements)}}]),t}()})); \ No newline at end of file diff --git a/js/textSplitter.js b/js/textSplitter.js new file mode 100644 index 0000000..1b5546c --- /dev/null +++ b/js/textSplitter.js @@ -0,0 +1,81 @@ +// Import debounce utility function. +import { debounce } from './utils.js'; + +// Defines a class to split text into lines, words and characters for animation. +export class TextSplitter { + // Constructor for TextScrollEffect which sets up the text animation. + // Parameters: + // textElement: HTMLElement - The DOM element that contains the text to be animated. + // options: Object (optional) - Configuration options for the text splitting and callbacks. + // options.resizeCallback: Function - A function to call on window resize events. + // options.splitTypeTypes: String - Specifies the types of splits to perform on the text. + // Possible values are based on SplitType's configuration, such as 'lines', 'words', 'chars'. + // See SplitType documentation for more details: https://github.com/lukePeavey/SplitType + // This constructor initializes the text splitting with specified options, sets up resize handling, + // and prepares the text element for animation effects. + constructor(textElement, options = {}) { + // Ensure the textElement is a valid HTMLElement. + if (!textElement || !(textElement instanceof HTMLElement)) { + throw new Error('Invalid text element provided.'); + } + + const { resizeCallback, splitTypeTypes } = options; + + this.textElement = textElement; + // Assign the resize callback if provided and is a function, otherwise null. + this.onResize = typeof resizeCallback === 'function' ? resizeCallback : null; + + // Set options for SplitType based on provided splitTypeTypes or default to SplitType's default behavior. + // The 'types' option allows customization of how text is split (e.g., into lines, words, characters). + // Refer to SplitType documentation for possible values and updates: https://github.com/lukePeavey/SplitType + const splitOptions = splitTypeTypes ? { types: splitTypeTypes } : {}; + this.splitText = new SplitType(this.textElement, splitOptions); + + // Initialize ResizeObserver to re-split text on resize events, if a resize callback is provided. + if (this.onResize) { + this.initResizeObserver(); // Set up observer to detect resize events. + } + } + + // Sets up ResizeObserver to re-split text on element resize. + initResizeObserver() { + this.previousContainerWidth = null; // Track element width to detect resize. + + let resizeObserver = new ResizeObserver( + debounce((entries) => this.handleResize(entries), 100) + ); + resizeObserver.observe(this.textElement); // Start observing the text element. + } + + // Handles element resize, re-splitting text if width changes. + handleResize(entries) { + const [{ contentRect }] = entries; + const width = Math.floor(contentRect.width); + // If element width changed, re-split text and call resize callback. + if ( this.previousContainerWidth && this.previousContainerWidth !== width ) { + this.splitText.split(); // Re-split text for new width. + this.onResize(); // Execute the callback function. + } + this.previousContainerWidth = width; // Update stored width. + } + + // Reset text + revert() { + return this.splitText.revert(); + } + + // Returns the lines created by splitting the text element. + getLines() { + return this.splitText.lines; + } + + // Returns the words created by splitting the text element. + getWords() { + return this.splitText.words; + } + + // Returns the chars created by splitting the text element. + getChars() { + return this.splitText.chars; + } +} diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000..ba829d9 --- /dev/null +++ b/js/utils.js @@ -0,0 +1,10 @@ +// Defines a debounce function to limit the rate at which a function can fire. +export const debounce = (func, delay) => { + let timerId; // Holds a reference to the timeout between calls. + return (...args) => { + clearTimeout(timerId); // Clears the current timeout, if any, to reset the debounce timer. + timerId = setTimeout(() => { + func.apply(this, args); // Calls the passed function after the specified delay with the correct context and arguments. + }, delay); + }; +};