2 lines
3.9 KiB
JavaScript
2 lines
3.9 KiB
JavaScript
/*! For license information please see tsparticles.interaction.external.attract.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=>(()=>{"use strict";var e={961:e=>{e.exports=t}},a={};function i(t){var r=a[t];if(void 0!==r)return r.exports;var c=a[t]={exports:{}};return e[t](c,c.exports,i),c.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={};return(()=>{i.r(r),i.d(r,{Attract:()=>e,loadExternalAttractInteraction:()=>c});var t=i(961);class e{constructor(){this.distance=200,this.duration=.4,this.easing="ease-out-quad",this.factor=1,this.maxSpeed=50,this.speed=1}load(t){t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration),void 0!==t.easing&&(this.easing=t.easing),void 0!==t.factor&&(this.factor=t.factor),void 0!==t.maxSpeed&&(this.maxSpeed=t.maxSpeed),void 0!==t.speed&&(this.speed=t.speed))}}class a extends t.ExternalInteractorBase{constructor(t,e){super(e),this._engine=t,e.attract||(e.attract={particles:[]}),this.handleClickMode=t=>{const a=this.container.actualOptions.interactivity.modes.attract;if(a&&"attract"===t){e.attract||(e.attract={particles:[]}),e.attract.clicking=!0,e.attract.count=0;for(const t of e.attract.particles)this.isEnabled(t)&&t.velocity.setTo(t.initialVelocity);e.attract.particles=[],e.attract.finish=!1,setTimeout((()=>{e.destroyed||(e.attract||(e.attract={particles:[]}),e.attract.clicking=!1)}),1e3*a.duration)}}}clear(){}init(){const t=this.container,e=t.actualOptions.interactivity.modes.attract;e&&(t.retina.attractModeDistance=e.distance*t.retina.pixelRatio)}async interact(){const e=this.container,a=e.actualOptions,i=e.interactivity.status===t.mouseMoveEvent,r=a.interactivity.events,c=r.onHover.enable,n=r.onHover.mode,o=r.onClick.enable,s=r.onClick.mode;i&&c&&(0,t.isInArray)("attract",n)?this.hoverAttract():o&&(0,t.isInArray)("attract",s)&&this.clickAttract()}isEnabled(e){var a;const i=this.container,r=i.actualOptions,c=i.interactivity.mouse,n=(null!==(a=null==e?void 0:e.interactivity)&&void 0!==a?a:r.interactivity).events;if(!(c.position&&n.onHover.enable||c.clickPosition&&n.onClick.enable))return!1;const o=n.onHover.mode,s=n.onClick.mode;return(0,t.isInArray)("attract",o)||(0,t.isInArray)("attract",s)}loadModeOptions(t,...a){t.attract||(t.attract=new e);for(const e of a)t.attract.load(null==e?void 0:e.attract)}reset(){}clickAttract(){const e=this.container;if(e.attract||(e.attract={particles:[]}),e.attract.finish||(e.attract.count||(e.attract.count=0),e.attract.count++,e.attract.count===e.particles.count&&(e.attract.finish=!0)),e.attract.clicking){const a=e.interactivity.mouse.clickPosition,i=e.retina.attractModeDistance;if(!i||i<0||!a)return;this.processAttract(a,i,new t.Circle(a.x,a.y,i))}else!1===e.attract.clicking&&(e.attract.particles=[])}hoverAttract(){const e=this.container,a=e.interactivity.mouse.position,i=e.retina.attractModeDistance;!i||i<0||!a||this.processAttract(a,i,new t.Circle(a.x,a.y,i))}processAttract(e,a,i){const r=this.container,c=r.actualOptions.interactivity.modes.attract;if(!c)return;const n=r.particles.quadTree.query(i,(t=>this.isEnabled(t)));for(const i of n){const{dx:r,dy:n,distance:o}=(0,t.getDistances)(i.position,e),s=c.speed*c.factor,d=(0,t.clamp)((0,t.getEasing)(c.easing)(1-o/a)*s,0,c.maxSpeed),l=t.Vector.create(0===o?s:r/o*d,0===o?s:n/o*d);i.position.subFrom(l)}}}async function c(t){await t.addInteractor("externalAttract",(e=>new a(t,e)))}})(),r})())); |