diff --git a/src/parallax-css-testpage/particles.js b/src/parallax-css-testpage/particles.js index 232721bfe749afa06365927ca4be5fb439498920..1df4b28ec724f16ef5ad8dce74d984325e1d12be 100644 --- a/src/parallax-css-testpage/particles.js +++ b/src/parallax-css-testpage/particles.js @@ -16,7 +16,7 @@ function randomValue(min, max) { var value = (Math.random() * (+max - +min) + +min) // Prevent values that can be possible boring - return (value === 0 || value === 1) + return (min !== 0 && max !== 0 && (value === 0 || value === 1)) ? randomValue(min, max) : value } @@ -31,6 +31,17 @@ function getNodeHeight(node) { return (dimensions) ? dimensions.height : window.innerHeight } +function calcParticleCount(scene, particleDensity) { + var referenceArea = 100 * 100 // 100px * 100px => px^2 + var sceneVolume = scene.width * scene.height + var scale = 100 + var particleFactor = (sceneVolume / referenceArea) / scale + var particleCount = Math.abs(Math.trunc( + particleFactor * particleDensity + )) + return particleCount || 0 +} + // // Data @@ -233,14 +244,16 @@ function CreateScene({ canvasId, contentId, depth, fps }) { function CreateParticles(scene, { - amount, + density, color, size, speed, lifespan, }) { return Array.from( - { length: amount }, + { + length: calcParticleCount(scene, density) + }, function createParticle() { return Particle({ position: diff --git a/src/parallax-css-testpage/template.html b/src/parallax-css-testpage/template.html index fe10fd3894019c37e82ce550e8559959611b7317..f924691a067a60e6feb359f433c4c438cd394f29 100644 --- a/src/parallax-css-testpage/template.html +++ b/src/parallax-css-testpage/template.html @@ -26,6 +26,7 @@ <div class="static full-bg bg-image"></div> <div class="static full-bg vcr-overlay"></div> <div class="static full-bg grid"></div> + <canvas id="debug-particles" class="static full-bg particles"></canvas> <canvas id="bg-particles" class="static full-bg particles"></canvas> <div class="static full-bg vignette"></div> <canvas id="fg-particles" class="static full-bg particles"></canvas> @@ -94,7 +95,7 @@ depth: 2.5, }, particles: { - amount: 50, + density: 15, color: 'white', size: 40, speed: 0.5, @@ -113,14 +114,13 @@ depth: 0.08, }, particles: { - amount: 150, + density: 100, color: 'white', size: 7, speed: 0.2, lifespan: 8000 // in milliseconds } } - var animation = Particles([ fgParticleConfig, bgParticleConfig,