@tsparticles/effect-trail
Version:
tsParticles trail effect
2 lines • 2.56 kB
JavaScript
/*! For license information please see tsparticles.effect.trail.min.js.LICENSE.txt */
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],e);else{var a="object"==typeof exports?e(require("@tsparticles/engine")):e(t.window);for(var i in a)("object"==typeof exports?exports:t)[i]=a[i]}}(this,(t=>(()=>{var e={303:e=>{e.exports=t}},a={};function i(t){var r=a[t];if(void 0!==r)return r.exports;var o=a[t]={exports:{}};return e[t](o,o.exports,i),o.exports}i.d=(t,e)=>{for(var a in e)i.o(e,a)&&!i.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};i.r(r),i.d(r,{loadTrailEffect:()=>s});var o=i(303);const n={a:1,b:0,c:0,d:1};class l{draw(t){const{context:e,radius:a,particle:i,transformData:r}=t,l=a*o.double,s=i.container.retina.pixelRatio,f=i.getPosition(),c=i.trail;if(!c||!i.trailLength)return;const d=i.trailLength+a;if(c.push({color:e.fillStyle??e.strokeStyle,position:{x:f.x,y:f.y},transformData:{...t.transformData}}),c.length<2)return;for(;c.length>d;)c.shift();const h=Math.min(c.length,d),p=i.container.canvas.size.width+l,x=i.container.canvas.size.height+l;let y=c[h-1].position;for(let t=h;t>o.none;t--){const a=c[t-1],r=a.position,f=i.trailTransform?a.transformData??n:n;e.setTransform(f.a,f.b,f.c,f.d,r.x,r.y),e.beginPath(),e.moveTo(y.x-r.x,y.y-r.y);const d={x:(y.x+p)%p,y:(y.y+x)%x};if(Math.abs(y.x-r.x)>p*o.half||Math.abs(y.y-r.y)>x*o.half){y=r;continue}e.lineTo(Math.abs(y.x-r.x)>p*o.half?d.x:o.originPoint.x,Math.abs(y.y-r.y)>x*o.half?d.y:o.originPoint.y);const g=Math.max(t/h*l,s,i.trailMinWidth??-1),u=e.globalAlpha;e.globalAlpha=i.trailFade?t/h:o.defaultAlpha,e.lineWidth=i.trailMaxWidth?Math.min(g,i.trailMaxWidth):g,e.strokeStyle=a.color,e.stroke(),e.globalAlpha=u,y=r}e.setTransform(r.a,r.b,r.c,r.d,f.x,f.y)}particleInit(t,e){e.trail=[];const a=e.effectData;e.trailFade=a?.fade??!0,e.trailLength=(0,o.getRangeValue)(a?.length??10)*t.retina.pixelRatio,e.trailMaxWidth=a?.maxWidth?(0,o.getRangeValue)(a.maxWidth)*t.retina.pixelRatio:void 0,e.trailMinWidth=a?.minWidth?(0,o.getRangeValue)(a.minWidth)*t.retina.pixelRatio:void 0,e.trailTransform=a?.transform??!1}}async function s(t,e=!0){t.checkVersion("3.9.1"),await t.addEffect("trail",new l,e)}return r})()));