UNPKG

fancy-webgl-sparkles

Version:

PIXI.js library to add glitter particles with bokeh and special effects to your DOM elements

2 lines 18.9 kB
/*! fancy-webgl-sparkles 1.0.5 | (c) 2021 Eli Menendez | Apache License */ const FancyWebGLSparkles=(()=>{class t{constructor(t,e={}){if(!(t instanceof Node))throw"Can't initialize FancyWebGLSparkles because "+t+" is not a Node.";this.settings=e,this.element=t,this.mouseEventElement=null,this.pixi=null,this.sprites="data:image/png;base64,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",this.spriteSheetData={frames:{"s1.png":{frame:{x:98,y:112,w:37,h:35},spriteSourceSize:{x:12,y:14,w:64,h:64},sourceSize:{w:64,h:64}},"s10.png":{frame:{x:0,y:112,w:48,h:49},spriteSourceSize:{x:8,y:8,w:64,h:64},sourceSize:{w:64,h:64}},"s2.png":{frame:{x:49,y:112,w:48,h:41},spriteSourceSize:{x:8,y:12,w:64,h:64},sourceSize:{w:64,h:64}},"s3.png":{frame:{x:109,y:56,w:52,h:55},spriteSourceSize:{x:5,y:5,w:64,h:64},sourceSize:{w:64,h:64}},"s4.png":{frame:{x:0,y:0,w:56,h:55},spriteSourceSize:{x:4,y:5,w:64,h:64},sourceSize:{w:64,h:64}},"s5.png":{frame:{x:55,y:56,w:53,h:55},spriteSourceSize:{x:5,y:5,w:64,h:64},sourceSize:{w:64,h:64}},"s6.png":{frame:{x:111,y:0,w:37,h:35},spriteSourceSize:{x:11,y:11,w:64,h:64},sourceSize:{w:64,h:64}},"s7.png":{frame:{x:136,y:112,w:26,h:25},spriteSourceSize:{x:18,y:19,w:64,h:64},sourceSize:{w:64,h:64}},"s8.png":{frame:{x:0,y:56,w:54,h:54},spriteSourceSize:{x:5,y:5,w:64,h:64},sourceSize:{w:64,h:64}},"s9.png":{frame:{x:57,y:0,w:53,h:55},spriteSourceSize:{x:5,y:5,w:64,h:64},sourceSize:{w:64,h:64}}},meta:{image:this.sprites,size:{w:163,h:162},scale:"1"}};for(let t in this.getDefaultSettings()){let i=this.element.getAttribute("sparkle-"+t);if(t in e)this.settings[t]=e[t];else if(""!=i&&null!=i)try{this.settings[t]=JSON.parse(i)}catch(e){this.settings[t]=i}else this.settings[t]=this.getDefaultSettings()[t]}this.addEventListeners()}getDefaultSettings(){return{sparkleColor:["#ffffff","#ffff00","#e15ecb","#32e187"],renderBokeh:!1,renderSparkles:!0,renderStars:!0,sparkleScale:50,speed:2,minSize:.05,maxSize:.16,direction:"both",renderOutside:!0,bokehColor:["#ffffff","#ffff00"],bokehScale:1.5,bokehSize:.7,starScale:2,starSize:1,boundaryScale:1,persistent:!1}}static init(e,i){e instanceof Node&&(e=[e]),e instanceof NodeList&&(e=[].slice.call(e)),e instanceof Array&&e.forEach((e=>{"FancyWebGLSparkles"in e||(e.FancyWebGLSparkles=new t(e,i))}))}addEventListeners(){if(!this.settings.persistent)return this.element.addEventListener("mouseenter",(t=>{this.mouseEventElement=t,this.start(t.target)})),void this.element.addEventListener("mouseleave",(()=>{null!==this.pixi&&void 0!==this.pixi&&(this.pixi.bIsPendingDestroy=!0)}));this.start(this.element)}stop(){this.pixi.stop(),this.pixi.bInstanceHasBeenInitialized=!0}start(t){this.width=this.settings.renderOutside?1.4*this.element.getBoundingClientRect().width*this.settings.boundaryScale:this.element.getBoundingClientRect().width,this.height=this.settings.renderOutside?1.4*this.element.getBoundingClientRect().height*this.settings.boundaryScale:this.element.getBoundingClientRect().height,null==this.pixi&&(this.pixi=new PIXI.Application({width:this.width,height:this.height,transparent:!0,autoDensity:!0,clearBeforeRender:!0})),this.pixi.renderer.context.isLost&&(this.pixi.destroy(!0,{children:!0,texture:!1,baseTexture:!1}),this.pixi=new PIXI.Application({width:this.width,height:this.height,transparent:!0,autoDensity:!0,clearBeforeRender:!0}),this.pixi.bInstanceHasBeenInitialized=void 0);const e=t.appendChild(this.pixi.view);e.style.position="absolute",e.style.left="50%",e.style.top="50%",e.style.transform="translate(-50%, -50%)",this.pixi.bIsPendingDestroy=!1,e.style.pointerEvents="none";"static"===window.getComputedStyle(t).position&&(t.style.position="relative");const i=new PIXI.filters.AdvancedBloomFilter(.05,50,4,4,4,null,1,PIXI.settings.RESOLUTION);this.pixi.stage.filters=[i],this.pixi.stage.filterArea=this.pixi.screen;const s=`data:application/json;base64,${btoa(JSON.stringify(this.spriteSheetData))}`;0===Object.keys(PIXI.utils.TextureCache).length?this.pixi.loader.add("spritesheet",s).load((()=>this.onTexturesLoaded(!1))):this.onTexturesLoaded(!0)}onTexturesLoaded(t){if(t&&null!=this.pixi.bInstanceHasBeenInitialized)return void this.pixi.start();const e=[],i=[],s=[],a=[];for(let t=0;t<10;++t)e.push(PIXI.Texture.from(`s${t+1}.png`));this.pixi.stage.alpha=0;const h=new PIXI.ParticleContainer(Math.round(this.settings.sparkleScale/10*this.settings.bokehScale),{scale:!0,vertices:!0,position:!0,rotation:!1,uvs:!0,alpha:!0}),n=new PIXI.ParticleContainer(Math.round(this.settings.sparkleScale),{scale:!0,vertices:!0,position:!0,rotation:!1,uvs:!0,alpha:!0}),r=new PIXI.ParticleContainer(Math.round(this.settings.sparkleScale/8*this.settings.starScale),{scale:!0,vertices:!0,position:!0,rotation:!0,uvs:!0,alpha:!0}),o=new PIXI.Container;o.addChild(n);const d=new PIXI.filters.GlowFilter(10,1,0,PIXI.utils.string2hex("#ffffff"),.1);o.filters=[d],o.filterArea=this.pixi.renderer.screen;for(let t=0;t<Math.round(.1*this.settings.sparkleScale*this.settings.bokehScale);++t){const t=Math.round(Math.random())?new PIXI.Sprite(e[6]):new PIXI.Sprite(e[9]);t.scale.set(Math.random()*(1.2*this.settings.bokehSize)+.4*this.settings.bokehSize),t.blendMode=PIXI.BLEND_MODES.OVERLAY,t.tint="rainbow"===this.settings.bokehColor?15258829*Math.random():PIXI.utils.string2hex(this.settings.bokehColor[Math.floor(Math.random()*this.settings.bokehColor.length)]),t.x=Math.random()*this.pixi.screen.width,t.y=Math.random()*this.pixi.screen.height,t.anchor.set(.5,.5),t.fade=Math.round(Math.random()),t.alpha=this.clamp(Math.random(),.1,.7),i.push(t),h.addChild(t)}for(let t=0;t<Math.round(this.settings.sparkleScale);++t){const t=PIXI.AnimatedSprite.fromFrames(["s1.png","s2.png","s3.png","s4.png","s5.png","s6.png","s7.png"]);t.tint="rainbow"===this.settings.sparkleColor?15258829*Math.random():PIXI.utils.string2hex(this.settings.sparkleColor[Math.floor(Math.random()*this.settings.sparkleColor.length)]),t.x=Math.random()*this.pixi.screen.width,t.y=Math.random()*this.pixi.screen.height,t.anchor.set(.5,.5),t.blendMode=PIXI.BLEND_MODES.HARD_LIGHT,t.alpha=this.clamp(Math.random(),.3,1),t.fade=Math.round(Math.random()),t.rotation=Math.random()*Math.PI,t.scale.set(this.clamp(Math.random()*this.settings.maxSize,this.settings.minSize,this.settings.maxSize)),t.gotoAndPlay(Math.floor(6*Math.random())),t.animationSpeed=.18;const e=Math.floor(20*Math.random())-10,i="up"===this.settings.direction?Math.floor(5*Math.random())-5.5:"down"===this.settings.direction?Math.floor(5*Math.random())+.5:Math.floor(10*Math.random())-5;t.direction={x:e,y:i},s.push(t),n.addChild(t)}for(let t=0;t<Math.round(.25*this.settings.sparkleScale*this.settings.starScale);++t){const t=new PIXI.Sprite(e[7]);t.tint=PIXI.utils.string2hex("#ffffff"),t.x=Math.random()*this.pixi.screen.width,t.y=Math.random()*this.pixi.screen.height,t.anchor.set(.5,.5),t.alpha=this.clamp(Math.random(),.3,1),t.fade=Math.round(Math.random()),t.rotation=Math.random()*Math.PI,t.zoom=Math.floor(Math.random()),t.scale.set(this.clamp(Math.random()*this.settings.maxSize*1.5,1.5*this.settings.minSize,1.5*this.settings.maxSize));const i=Math.floor(20*Math.random())-10,s="up"===this.settings.direction?Math.floor(5*Math.random())-5.5:"down"===this.settings.direction?Math.floor(5*Math.random())+.5:Math.floor(10*Math.random())-5;t.direction={x:i,y:s},a.push(t),r.addChild(t)}this.settings.renderBokeh&&this.pixi.stage.addChild(h),this.settings.renderSparkles&&this.pixi.stage.addChild(o),this.settings.renderStars&&this.pixi.stage.addChild(r),this.pixi.ticker.add((()=>{this.fadeInCanvas(),this.fadeOutCanvas(),null==this.pixi||this.pixi.bIsPendingDestroy||this.update(i,s,a)}))}clamp(t,e,i){return t>i?i:t<e?e:t}fadeInCanvas(){this.pixi.stage.alpha>=1||this.pixi.bIsPendingDestroy||(this.pixi.stage.alpha=this.clamp(this.pixi.stage.alpha,0,1),this.pixi.stage.alpha+=.05*this.pixi.ticker.deltaTime)}fadeOutCanvas(){(0!==this.pixi.stage.alpha||this.pixi.bIsPendingDestroy)&&(this.pixi.stage.alpha>=0&&this.pixi.bIsPendingDestroy&&(this.pixi.stage.alpha=this.clamp(this.pixi.stage.alpha,0,1),this.pixi.stage.alpha-=.08*this.pixi.ticker.deltaTime),this.pixi.stage.alpha<=0&&this.pixi.bIsPendingDestroy&&this.stop(this.mouseEventElement))}pulseParticle(t,e=1.2,i=0){const s=t.scale.x;t.zoom=s>=e&&t.zoom?0:s<=i&&!t.zoom?1:t.zoom,t.zoom&&t.scale.set(t.scale.x+.003*this.pixi.ticker.deltaTime),t.zoom||t.scale.set(t.scale.x-.003*this.pixi.ticker.deltaTime),t.scale.x=this.clamp(t.scale.x,i,e),t.scale.y=this.clamp(t.scale.y,i,e)}fadeParticle(t,e=.6,i=.4,s=1.2){t.fade=t.alpha>=e&&t.fade?0:t.alpha<=0&&!t.fade?1:t.fade,t.fade&&(t.alpha+=.003*this.pixi.ticker.deltaTime),t.fade||(t.alpha-=.003*this.pixi.ticker.deltaTime),t.alpha=this.clamp(t.alpha,0,e),t.fade||0!=t.alpha||(t.x=Math.random()*this.pixi.screen.width,t.y=Math.random()*this.pixi.screen.height,t.scale.set(Math.random()*(s-i)+i))}throwParticlesBackToTheCanvas(t){const e=this.element.getBoundingClientRect().width,i=this.element.getBoundingClientRect().height,s={xMin:()=>this.settings.renderOutside?.1*e:0,xMax:()=>this.settings.renderOutside?this.width-.1*e:this.width,yMin:()=>this.settings.renderOutside?.1*i:0,yMax:()=>this.settings.renderOutside?this.height-.1*i:this.height};(t.x>s.xMax()||t.x<s.xMin()||t.y>s.yMax()||t.y<s.yMin())&&t.scale.set(this.clamp(Math.random()*this.settings.maxSize,this.settings.minSize,this.settings.maxSize)),t.x>s.xMax()&&(t.x=this.settings.renderOutside?s.xMin:0),t.x<s.xMin()&&(t.x=this.settings.renderOutside?s.xMax:this.width),t.y>s.yMax()&&(t.y=this.settings.renderOutside?s.yMin:0,t.x=Math.floor(Math.random()*s.xMax)),t.y<s.yMin()&&(t.y=this.settings.renderOutside?s.yMax:this.height,t.x=Math.floor(Math.random()*s.xMax))}update(t,e,i){e.forEach((t=>{this.throwParticlesBackToTheCanvas(t),this.fadeParticle(t,1,this.settings.minSize,this.settings.maxSize);const e=()=>Math.random()>2*Math.random()?this.settings.speed/20:0,i=()=>Math.random()>5*Math.random()?this.settings.speed/10:this.settings.speed/15;t.x+=e()*t.direction.x*this.pixi.ticker.deltaTime,t.y+=i()*t.direction.y*this.pixi.ticker.deltaTime})),t.forEach((t=>{this.throwParticlesBackToTheCanvas(t),this.fadeParticle(t,.6,.4*this.settings.bokehSize,1.2*this.settings.bokehSize);let e=t.scale.x;e+=.001*this.pixi.ticker.deltaTime,t.y-=.2*Math.random()*this.pixi.ticker.deltaTime,t.scale.set(e)})),i.forEach((t=>{this.throwParticlesBackToTheCanvas(t),this.fadeParticle(t,1,this.settings.minSize,this.settings.maxSize),t.x+=this.settings.speed/50*t.direction.x*this.pixi.ticker.deltaTime,t.y+=this.settings.speed/30*t.direction.y*this.pixi.ticker.deltaTime,t.rotation+=t.direction.y*this.pixi.ticker.deltaTime*Math.PI*.01,this.pulseParticle(t,1.5*this.settings.maxSize,.1)}))}}return"undefined"!=typeof document&&(window.FancyWebGLSparkles=t,t.init(document.querySelectorAll("[sparkle]"))),t})();