From 87993ae9c6b39004e79521e71417ab67df37804d Mon Sep 17 00:00:00 2001 From: Tomas Horsky Date: Tue, 16 Jun 2026 12:36:37 +0900 Subject: [PATCH] updated animation --- public/airplane.png | Bin 0 -> 1160 bytes public/plane.webp | Bin 8252 -> 0 bytes public/profile.jpg | Bin 37168 -> 0 bytes src/lib/world-map/JourneyView.svelte | 167 +++++++++++++++++---------- 4 files changed, 108 insertions(+), 59 deletions(-) create mode 100644 public/airplane.png delete mode 100644 public/plane.webp delete mode 100644 public/profile.jpg diff --git a/public/airplane.png b/public/airplane.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa84fec9782218185cd8dc70e91f3ab77f5b6d0 GIT binary patch literal 1160 zcmV;31b6$1P)(HU)1q1Dah64xKM@7?Q*Y@RDoMA@icX^YfT; z8JOu>c*vZ{X@~-j0Fzt`50%w57@~krTni7CX?hNl*N}gJH(iSlm0dNCk|AKeYw;m6 z7x=qIQ_ca?T_+GC-`8k}0uHzqA0jL2Fhl|CT_+G4$y(LbIt;lFEODJgXnb1dDESR& zbe%*x z$0XZp@sV)WpeeV2CIVq3C0Sd=2kQ(PqJUHS|4Zq)kdo+trP=Xx{m;XsDcuCXHyILL z>q%vb$`HxOD>WZwNb;Jc7yQB+DpOQSjOveu((-D?L^oQx{!bQ0$u(dWC1r*#Do9K6 zCeUEv`pp&$QNRztWJ=0F#w0(sR3(4Ik}2(!ly5U8c-zwY(N0T-i~(;^LRxbqxx=%{ z6qOQx0xwW9mgPt=nMlsIpy4}9h9vPb@DwF`vD>;sV~;z!i2Shr_3&I)Q-1M4yow-_ z8-ITmW4`u4tcoa-NB?_|Gvs{_M5+km^J**VCjU`LkSn%To1i`VNhLv{k*t&~|36bs zc_21R_EQZszd!O+@q>3PtwubxC`b|zVutQdYsznyb7t|rWR`m=SSe)YmQshto zdHxn|w{ZREEf!e}>l)%9x0p$xTtV~&T1xsEC8R;`(@RTEimeM`X~qO)J3>Kxm@z@w zuu~ASrOh)grX+aD(z7^uAN^t2jBWy8D3EQ@r!6)*D3qfqRS?oRpkSJG$A)|VS^P@c z>3wCf54-8s8n0W@84V_z&$PNurtC<2CeM%tW}YD}{yajOV0wnMiS-C+r0f~eYTP5F z8Gm5MRcvsbKxoK;E*>FA9(jfw3g!`VY+fJ-OKx#3JXGZ9RgaLvi32#kdy#9=F&uC| zmT{!4axFM?26K##4%cF1pey4VRhzuTi(#s6L~vctMf!AgOOG~T4KSx5ErK8jf*=S2 aG4n5S5xK~F9}a^60000l=q4N literal 0 HcmV?d00001 diff --git a/public/plane.webp b/public/plane.webp deleted file mode 100644 index 6003f20f2076625bb5c8a5cd7caa62274d34ac8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8252 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

jeDnh zSk6$?OtY+}RgNOvy=4mWN7aZbsB%t3V1Xn8+abR(jHif(I%4t&FrkPWgWK_`TfIW$ zl;RZ9N0^3Ol%(o9hBl5xYe^fj=C9KtL?+A$K2#la7}kdeLO$UQA-nkB+u3qlzOX+H zo|iaSqmv=jg9WM;zyhwXLl_Geb$FzFbNj} zA~?qWq9S)E`Tb^szF1@^)ciJkwB;2Hcrq1PBZ-unHIOcHM(mi#h(8UOG%_xn@2y=( zuzwa9;l4U@)zx=AkR@dC@W!45`_ySAGbJ=)sbha4o!$X*A#$%Qk0I+tQEB0n^{O<% zej}KjYRXuPS%euLlgqCz>R0GbIJG5t6U^%Z$ni}8jL2Px#mnRh%Mp1ZB2J{%?f~TM z+Kon#CA!wKQ57-xWJf>N_0;sxLsW*hhfcC}Lgy4xB}{G=R@(v-AQXp30f8*R#vw@O zFp*8h{zRx8OwTSE_qV+FIVo2L^%0>!vMErO9}8j^!I2f4zA{SLm5Oh%xd%)zgu|HZ zwXI5V;5<5<=Ojx^i+=JzjezzDRYAjk-vZy5jm+gk1>^N{_2R^s;GX9QVA&ffkn^462Hf&g->?_SH&aGF|T z%--hs0iJf-!r}$?-GQ)Eu-{qhP{KSpDK@b-DlZ=}31rSBWQ27MTrV`fDMY; z&QzONjJfn_$;3j{QPzalE2)(&m{H>5`;E=5x0A5&1%d7+V*OCv_{-zG5%|n<%R~$}Q)<7NbSMvNf+I7UI;B zE27TpR~BVrk+Tw0#P@QYLR>6DL3IOgb{`NcixZsU<724itv3Qpt=twwR=`IqM(P7o zxMBhXI9M^o?-;nYI|1Eg++}d=$Vh<@5+TARr!mV!y))EdBj8MlbMUw(!X;o8il#XH zM1^dl_nJ%~cye78>F20%O-=VY^9?DfjY~>UFiBSCH;Q2*Ndv2<&SU{fUva8xIp6He zWVcgrBGx@fzfh+`k>i?X6+Q-l~ zmN_`b-D;q%X(5Wbja=2k9iT7wnmUL8m8r5T0Taa;S0veYXR+0pj5d>jnKDEkgd0p= z#E$uAds-YFCkfnO5!MVI#QZKFH7y?Ct0Rw#47&${p4*Qny8i$mM%oDbfD@QV5Dk=j zow(?d8x_Ub?5qh^RTl&>1mw23#E;BATCBGXm6IwFMNhE{d)!<3@AUrwUrk6gDPAYK z-{tf^2=}+j+6Y4SlHBd!i;MdoeML2~>cbFQa6P?`?$9iZ)a#dhU*Z(=MLJZ}-W!;a zq>+$ZTE;hg7=0S!^wh(MQp8os%KrduPApme^U-*Tz6gLWSKZkeh;93hCMGX)n9}f^ z!es7+(w>p}uJwxb6b4X{DC;3fBzG=L$|H$ckkl-3kqBg&f}1J4k}*ZCBoYUt>yAoI zacA)-*H%w_Q`fpm8s?XYPb)V}sKm720C=HkWl~xKLaov{42WlxxI%GxJeGhOKdt># zznqs4HPFQOSC=7rt3|}=nP?hM~yW$rB#y!|dBUu%s7e)Z3ijrM1eXktFg~m}l z@*w$+s=9!io9j~ttSHAY^0J_nng)~!fFd@E@nbTxu$`D!oNm|D0$F;xp9)JUQg1V?wUDsaKpL^q9b2eF#$QAs(mG5-J>l;XlC zM{<#QiTL;4raZOkJ6aQ2QB5N>V0MXV%F1N0QyjR93s_)IZU|F!Vq|H+Fb=v(mCp{> z_ky85xA4SzPq^@kc%c$TpS3;{xE6VZ6w^(IJq=_IhsE|ml6pI5Yuv69oG%tvSf<`2) zIBwKycbXb;4Sr|MOt=sBde(}_>E%j>WlExBnpLckkV5R!y;w+Pc``CDLn$KwOCVDc z31N|Q(J~``y_Zf72Q>NDeb3Atx-BO*P7M`~Kde1dKqNXxZK+!X|Xt^&F689ah@XG4oS%V`#RH*X! UNa7%aBx_zsaC3X|&^ogJ*$YdZ%K!iX diff --git a/src/lib/world-map/JourneyView.svelte b/src/lib/world-map/JourneyView.svelte index d19175b..1698c91 100644 --- a/src/lib/world-map/JourneyView.svelte +++ b/src/lib/world-map/JourneyView.svelte @@ -15,13 +15,16 @@ { countryName: 'United States', countryCode: '840', date: '2025-01-05', city: 'New York' }, { countryName: 'Thailand', countryCode: '764', date: '2025-04-18', city: 'Bangkok' }, { countryName: 'Australia', countryCode: '036', date: '2025-08-22', city: 'Sydney' }, + { countryName: 'Kenya', countryCode: '404', date: '2021-11-10', city: 'Nairobi' }, + { countryName: 'South Africa', countryCode: '710', date: '2026-02-05', city: 'Cape Town' }, ]; const HOME_COLOR = '#8b5cf6'; const VISITED_COLOR = '#22c55e'; - const ARC_COLOR = '#000000'; + const ARC_COLOR = '#666666'; const PLANE_COLOR = '#7c3aed'; - const PLANE_PATH = 'M14,0 L4,-3 L0,-7 L-3,-5 L0,-2 L-5,-1 L-9,-5 L-11,-4 L-7,0 L-11,4 L-9,5 L-5,1 L0,2 L-3,5 L0,7 L4,3 Z'; + const PLANE_IMG = '/airplane.png'; + const PLANE_SIZE = 28; const UNVISITED = '#ffffff'; const TERRITORY_PARENT = { @@ -91,7 +94,11 @@ return Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI; } - function animateStroke(pathEl, tipEl, startOffset, endOffset, duration) { + function planeTransform(x, y, angle, flip) { + return `translate(${x},${y}) rotate(${angle})${flip ? ' scale(1,-1)' : ''}`; + } + + function animateStroke(pathEl, tipEl, startOffset, endOffset, duration, flip = false, maskEl = null) { return new Promise((resolve) => { const node = pathEl.node(); if (!node) { resolve(); return; } @@ -106,13 +113,14 @@ const offset = startOffset + (endOffset - startOffset) * t; pathEl.attr('stroke-dashoffset', offset); + if (maskEl) maskEl.attr('stroke-dashoffset', offset); const drawn = totalLength - offset; const clamped = Math.max(0, Math.min(drawn, totalLength)); try { const pt = node.getPointAtLength(clamped); const angle = getAngleAtLength(node, clamped); - tipEl.attr('transform', `translate(${pt.x}, ${pt.y}) rotate(${angle}) scale(1.4)`).attr('opacity', 1); + tipEl.attr('transform', planeTransform(pt.x, pt.y, angle, flip)).attr('opacity', 1); } catch (e) { } @@ -244,7 +252,41 @@ }); } - function animateReprojectingArc(el, tip, geoPts, lineGen, duration) { + function animateIncrementalPath(el, tip, pts, duration, flip = false) { + return new Promise((resolve) => { + const steps = pts.length - 1; + const lineGen = d3.line().curve(d3.curveBasis); + + d3.timer(elapsed => { + if (isCancelled) { resolve(); return true; } + + const t = Math.min(elapsed / duration, 1); + const count = Math.max(2, Math.floor(t * steps) + 1); + const visible = pts.slice(0, count); + + if (visible.length >= 2) { + el.attr('d', lineGen(visible)); + } + + if (visible.length > 0) { + const last = visible[visible.length - 1]; + let angle = 0; + if (visible.length >= 2) { + const prev = visible[visible.length - 2]; + angle = Math.atan2(last[1] - prev[1], last[0] - prev[0]) * 180 / Math.PI; + } + tip.attr('transform', planeTransform(last[0], last[1], angle, flip)).attr('opacity', 1); + } + + if (t >= 1) { + resolve(); + return true; + } + }); + }); + } + + function animateReprojectingArc(el, tip, geoPts, lineGen, duration, flip = false) { return new Promise((resolve) => { const steps = geoPts.length - 1; @@ -271,8 +313,7 @@ const prev = screenPts[screenPts.length - 2]; angle = Math.atan2(last[1] - prev[1], last[0] - prev[0]) * 180 / Math.PI; } - tip.attr('transform', `translate(${last[0]},${last[1]}) rotate(${angle}) scale(1.4)`) - .attr('opacity', 1); + tip.attr('transform', planeTransform(last[0], last[1], angle, flip)).attr('opacity', 1); } if (t >= 1) { @@ -301,42 +342,29 @@ const pts = computeArc(homeCentroid, destCentroid); if (pts.length < 2) return; - const lineGen = d3.line().curve(d3.curveBasis); - const pathData = lineGen(pts); - if (!pathData) return; + const outFlip = pts[pts.length - 1][0] < pts[0][0]; - function createArc(pathData) { - const el = gAnim.append('path') - .attr('d', pathData) - .attr('fill', 'none') - .attr('stroke', ARC_COLOR) - .attr('stroke-width', 2.5) - .attr('stroke-opacity', 0.8) - .attr('stroke-linecap', 'round'); - const tip = gAnim.append('path') - .attr('d', PLANE_PATH) - .attr('fill', PLANE_COLOR) - .attr('opacity', 0); - return { el, tip }; - } + const outEl = gAnim.append('path') + .attr('fill', 'none') + .attr('stroke', ARC_COLOR) + .attr('stroke-width', 2.5) + .attr('stroke-opacity', 0.8) + .attr('stroke-linecap', 'round') + .attr('stroke-dasharray', '10, 6'); + const outTip = gAnim.append('image') + .attr('href', PLANE_IMG) + .attr('width', PLANE_SIZE) + .attr('height', PLANE_SIZE) + .attr('x', -PLANE_SIZE / 2) + .attr('y', -PLANE_SIZE / 2) + .attr('preserveAspectRatio', 'xMidYMid meet') + .attr('opacity', 0); - let { el: outEl, tip: outTip } = createArc(pathData); - const outLen = outEl.node().getTotalLength(); - outEl.attr('stroke-dasharray', outLen).attr('stroke-dashoffset', outLen); - - const homeDot = gAnim.append('circle') - .attr('r', 4) - .attr('fill', PLANE_COLOR) - .attr('cx', pts[0][0]) - .attr('cy', pts[0][1]) - .attr('opacity', 1); - - await animateStroke(outEl, outTip, outLen, 0, 2500); + await animateIncrementalPath(outEl, outTip, pts, 2500, outFlip); if (isCancelled) return; outEl.remove(); outTip.remove(); - homeDot.remove(); const targetPath = countryPaths.filter(d => effId(d) === destCode); targetPath.transition().duration(500).attr('fill', VISITED_COLOR); @@ -350,24 +378,29 @@ if (isCancelled) return; const revPts = [...pts].reverse(); - const revData = d3.line().curve(d3.curveBasis)(revPts); - let { el: retEl, tip: retTip } = createArc(revData); - const retLen = retEl.node().getTotalLength(); - retEl.attr('stroke-dasharray', retLen).attr('stroke-dashoffset', retLen); + const retFlip = revPts[revPts.length - 1][0] < revPts[0][0]; - const destDot = gAnim.append('circle') - .attr('r', 4) - .attr('fill', PLANE_COLOR) - .attr('cx', revPts[0][0]) - .attr('cy', revPts[0][1]) - .attr('opacity', 1); + const retEl = gAnim.append('path') + .attr('fill', 'none') + .attr('stroke', ARC_COLOR) + .attr('stroke-width', 2.5) + .attr('stroke-opacity', 0.8) + .attr('stroke-linecap', 'round') + .attr('stroke-dasharray', '10, 6'); + const retTip = gAnim.append('image') + .attr('href', PLANE_IMG) + .attr('width', PLANE_SIZE) + .attr('height', PLANE_SIZE) + .attr('x', -PLANE_SIZE / 2) + .attr('y', -PLANE_SIZE / 2) + .attr('preserveAspectRatio', 'xMidYMid meet') + .attr('opacity', 0); - await animateStroke(retEl, retTip, retLen, 0, 2200); + await animateIncrementalPath(retEl, retTip, revPts, 2200, retFlip); if (isCancelled) return; retEl.remove(); retTip.remove(); - destDot.remove(); await delay(300); } @@ -390,15 +423,23 @@ .attr('stroke', ARC_COLOR) .attr('stroke-width', 2.5) .attr('stroke-opacity', 0.8) - .attr('stroke-linecap', 'round'); - const outTip = gAnim.append('path') - .attr('d', PLANE_PATH) - .attr('fill', PLANE_COLOR) + .attr('stroke-linecap', 'round') + .attr('stroke-dasharray', '10, 6'); + const outTip = gAnim.append('image') + .attr('href', PLANE_IMG) + .attr('width', PLANE_SIZE) + .attr('height', PLANE_SIZE) + .attr('x', -PLANE_SIZE / 2) + .attr('y', -PLANE_SIZE / 2) + .attr('preserveAspectRatio', 'xMidYMid meet') .attr('opacity', 0); + const outGcs = geoPts.map(p => projection(p)).filter(Boolean); + const outFlipGlobe = outGcs.length >= 2 && outGcs[outGcs.length - 1][0] < outGcs[0][0]; + await Promise.all([ rotateGlobeTo(destCentroid[0], destCentroid[1], dur), - animateReprojectingArc(outEl, outTip, geoPts, lineGen, dur) + animateReprojectingArc(outEl, outTip, geoPts, lineGen, dur, outFlipGlobe) ]); if (isCancelled) return; @@ -419,15 +460,23 @@ .attr('stroke', ARC_COLOR) .attr('stroke-width', 2.5) .attr('stroke-opacity', 0.8) - .attr('stroke-linecap', 'round'); - const retTip = gAnim.append('path') - .attr('d', PLANE_PATH) - .attr('fill', PLANE_COLOR) + .attr('stroke-linecap', 'round') + .attr('stroke-dasharray', '10, 6'); + const retTip = gAnim.append('image') + .attr('href', PLANE_IMG) + .attr('width', PLANE_SIZE) + .attr('height', PLANE_SIZE) + .attr('x', -PLANE_SIZE / 2) + .attr('y', -PLANE_SIZE / 2) + .attr('preserveAspectRatio', 'xMidYMid meet') .attr('opacity', 0); + const retGcs = revGeoPts.map(p => projection(p)).filter(Boolean); + const retFlipGlobe = retGcs.length >= 2 && retGcs[retGcs.length - 1][0] < retGcs[0][0]; + await Promise.all([ rotateGlobeTo(homeCentroid[0], homeCentroid[1], dur), - animateReprojectingArc(retEl, retTip, revGeoPts, lineGen, dur) + animateReprojectingArc(retEl, retTip, revGeoPts, lineGen, dur, retFlipGlobe) ]); if (isCancelled) return;