ProficientPC_Logo Custom Web Design Services

Proficient

PC

Sprinkle Effect Script

				
					/*
  Sprinkle Effect Script
  Authors: John Flammer, Nadeem Shaikh
  Contact: Proficient PC, info@proficientpc.com
  Created on: 01/01/2024
  Script Version: Sprinkles_V1

  Description:
  This script randomly generates and animates sprinkle images on the webpage.
*/

function injectSprinkleStyles() {
  const style = document.createElement('style');
  style.textContent = `
      .sprinkle {
          transition: opacity 1s ease-in-out;
          position: absolute;
          opacity: 1;
          z-index: 9999;
      }
  `;
  document.head.appendChild(style);
}

const sprinkleImages = [
  '/sprinkles/blue_sprinkle.png',
  '/sprinkles/green_sprinkle.png',
  '/sprinkles/orange_sprinkle.png',
  '/sprinkles/purple_sprinkle.png',
  '/sprinkles/red_sprinkle.png',
  '/sprinkles/yellow_sprinkle.png'
];

function getRandomPosition() {
  const x = Math.random() * (window.innerWidth - 100) + 50;
  const y = Math.random() * (window.innerHeight - 100) + 50;
  return { x, y };
}

function getRandomRotation() {
  return Math.random() * 360;
}

function createSprinkles() {
  const sprinkleCount = window.innerWidth < 768 ? 7 : 14;

  for (let i = 0; i < sprinkleCount; i++) {
      createSprinkle();
  }
}

function createSprinkle() {
  const sprinkleEl = document.createElement('img');
  sprinkleEl.src = sprinkleImages[Math.floor(Math.random() * sprinkleImages.length)];
  sprinkleEl.classList.add('sprinkle');
  sprinkleEl.style.width = '17px';
  sprinkleEl.style.height = 'auto';

  const { x, y } = getRandomPosition();
  const rotation = getRandomRotation();

  sprinkleEl.style.left = `${x}px`;
  sprinkleEl.style.top = `${y}px`;
  sprinkleEl.style.transform = `rotate(${rotation}deg)`;

  document.body.appendChild(sprinkleEl);

  setTimeout(() => {
      sprinkleEl.style.opacity = 0;
      setTimeout(() => sprinkleEl.remove(), 1000);
  }, 3000);
}

window.onload = function() {
  injectSprinkleStyles();
  createSprinkles();
  setInterval(createSprinkles, 4000);
};