Skip to content

Interactive JavaScript Effects


Proppeller

var rotation = 0;
var element = document.querySelector('body');

function rotatePropeller() {
    rotation += 10;
    element.style.transform = 'rotate(' + rotation + 'deg)';
    element.style.webkitTransform = 'rotate(' + rotation + 'deg)';
    element.style.MozTransform = 'rotate(' + rotation + 'deg)';
    element.style.msTransform = 'rotate(' + rotation + 'deg)';
    element.style.OTransform = 'rotate(' + rotation + 'deg)';
    requestAnimationFrame(rotatePropeller);
}

rotatePropeller();

Zoom out and Zoom in

var zoomLevel = 1; 
var zoomStep = 0.05;
var zoomOut = true;

function animateZoom() {
  if (zoomOut) {
    zoomLevel -= zoomStep;
    if (zoomLevel <= 0.1) {
      zoomOut = false;
    }
  } else {
    zoomLevel += zoomStep;
    if (zoomLevel >= 1) {
      zoomOut = true;
    }
  }

  document.body.style.zoom = zoomLevel;

  requestAnimationFrame(animateZoom);
}

animateZoom();

Change background dynamically

function updateGradientBackground() {
  const colors = ['#ff6b6b', '#ffa07a', '#f0e68c', '#98fb98', '#dda0dd', '#87ceeb'];
  let currentIndex = 0;

  function changeColor() {
    document.body.style.transition = 'background-color 1s ease-in-out';
    document.body.style.backgroundColor = colors[currentIndex];
    currentIndex = (currentIndex + 1) % colors.length;
    setTimeout(changeColor, 2000);
  }

  changeColor();
}

updateGradientBackground();

Cursor trail effect

var trailElements = [];
var colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'];

document.addEventListener('mousemove', function (event) {
  var trailElement = document.createElement('div');
  trailElement.className = 'trail';
  var color = colors[Math.floor(Math.random() * colors.length)];
  trailElement.style.backgroundColor = color;
  trailElement.style.position = 'absolute';
  trailElement.style.width = '10px';
  trailElement.style.height = '10px';
  trailElement.style.borderRadius = '50%';
  trailElement.style.left = event.pageX - 5 + 'px';
  trailElement.style.top = event.pageY - 5 + 'px';

  document.body.appendChild(trailElement);
  trailElements.push(trailElement);

  if (trailElements.length > 20) {
    document.body.removeChild(trailElements.shift());
  }
});

Binary Rain

const binaryContainer = document.createElement('div');
binaryContainer.style.position = 'fixed';
binaryContainer.style.top = '0';
binaryContainer.style.left = '0';
binaryContainer.style.width = '100%';
binaryContainer.style.height = '100%';
binaryContainer.style.overflow = 'hidden';
binaryContainer.style.color = '#0F0'; // Color of the rain (green)
document.body.appendChild(binaryContainer);

setInterval(function () {
  const binaryDigit = Math.floor(Math.random() * 2); 
  const binaryElement = document.createElement('span');
  binaryElement.innerText = binaryDigit;
  binaryElement.style.position = 'absolute';
  binaryElement.style.left = Math.random() * 100 + 'vw';
  binaryElement.style.top = '-20px';
  binaryElement.style.fontSize = '20px'; // Adjust font size as needed
  binaryContainer.appendChild(binaryElement);

  const animationDuration = Math.random() * 3 + 2;
  binaryElement.style.animation = `fall ${animationDuration}s linear forwards`;

  // Remove the binary element after animation ends
  binaryElement.addEventListener('animationend', function() {
    binaryElement.remove();
  });
}, 100);

const styles = document.createElement('style');
styles.innerHTML = `
  @keyframes fall {
    0% {
      transform: translateY(-20px);
      opacity: 1;
    }
    100% {
      transform: translateY(100vh);
      opacity: 0;
    }
  }
`;
document.head.appendChild(styles);

Bnary rain effect with additional customization options:

const config = {
  fontSize: 20,          
  color: '#0F0',         
  density: 0.05,         
  speedRange: [2, 5],    
  lengthRange: [30, 60]  
};

const binaryContainer = document.createElement('div');
binaryContainer.style.position = 'fixed';
binaryContainer.style.top = '0';
binaryContainer.style.left = '0';
binaryContainer.style.width = '100%';
binaryContainer.style.height = '100%';
binaryContainer.style.overflow = 'hidden';
binaryContainer.style.color = config.color;
document.body.appendChild(binaryContainer);

setInterval(() => {
  if (Math.random() < config.density) {
    const binaryStream = createBinaryStream();
    binaryContainer.appendChild(binaryStream.element);
    const animationDuration = getRandomValueInRange(config.speedRange);
    binaryStream.element.style.animation = `fall ${animationDuration}s linear forwards`;
    binaryStream.element.addEventListener('animationend', () => {
      binaryStream.element.remove();
    });
  }
}, 100); 

const styles = document.createElement('style');
styles.innerHTML = `
  @keyframes fall {
    0% {
      transform: translateY(-${config.fontSize}px);
      opacity: 1;
    }
    100% {
      transform: translateY(100vh);
      opacity: 0;
    }
  }
`;
document.head.appendChild(styles);

function createBinaryStream() {
  const binaryStream = document.createElement('span');
  const streamLength = getRandomValueInRange(config.lengthRange);
  const binaryDigits = Array.from({ length: streamLength }, () => Math.floor(Math.random() * 2));
  binaryStream.textContent = binaryDigits.join('');
  binaryStream.style.position = 'absolute';
  binaryStream.style.left = `${Math.random() * 100}vw`;
  binaryStream.style.fontSize = `${config.fontSize}px`;
  return { element: binaryStream, length: streamLength };
}

function getRandomValueInRange(range) {
  return Math.random() * (range[1] - range[0]) + range[0];
}

Emoji Rain

var emojis = ['😀', '😍', '🚀', '💡', '🌟', '❤️', '🎉'];
var emojisContainer = document.createElement('div');
emojisContainer.style.position = 'fixed';
emojisContainer.style.top = '0';
emojisContainer.style.pointerEvents = 'none';
document.body.appendChild(emojisContainer);

setInterval(function () {
  var emoji = emojis[Math.floor(Math.random() * emojis.length)];
  var emojiElement = document.createElement('span');
  emojiElement.style.position = 'absolute';
  emojiElement.style.left = Math.random() * 100 + 'vw';
  emojiElement.style.animation = 'fall 5s linear forwards';
  emojiElement.innerText = emoji;
  emojisContainer.appendChild(emojiElement);
}, 500);

var styles = document.createElement('style');
styles.innerHTML = `
  @keyframes fall {
    0% {
      transform: translateY(0);
      opacity: 1;
    }
    100% {
      transform: translateY(100vh);
      opacity: 0;
    }
  }
`;
document.head.appendChild(styles);

Text to speech

var text = "Hello, I'm a cool text-to-speech demo!";
var speechSynthesis = window.speechSynthesis;
var utterance = new SpeechSynthesisUtterance(text);
speechSynthesis.speak(utterance);