Images Following Mouse

Image 1 Image 2

Add Code Block to page and replace the image source

<div class="imageList">
  <img src="https://images.unsplash.com/photo-1561948955-570b270e7c36?crop=entropy&cs=srgb&fm=jpg&q=85" alt="Image 1">
  <img src="https://images.unsplash.com/photo-1612532275214-e4ca76d0e4d1?crop=entropy&cs=srgb&fm=jpg&q=85" alt="Image 2">
  <img src="https://images.unsplash.com/photo-1606509769472-7660d4a478ac?crop=entropy&cs=srgb&fm=jpg&q=85" alt="">
  <img src="https://images.unsplash.com/photo-1548366086-7f1b76106622?crop=entropy&cs=srgb&fm=jpg&q=85" alt="">
</div>
 

Custom CSS

<style>
  body {
    --imgMaxWidth: 133px;
    --speed: 1s;
    --delay: 0.1s;
  }

  @keyframes zoomOutFade {
    0% {
      opacity: 1;
      transform: translate(-50%, -50%) scale(1);
    }
    100% {
      opacity: 0;
      transform: translate(-50%, -50%) scale(0.2);
    }
  }

  .droppedImage {
    position: absolute;
    max-width: var(--imgMaxWidth);
    border-radius: 10px;
    animation: zoomOutFade var(--speed) forwards cubic-bezier(0.16, 1, 0.3, 1);
    animation-delay: var(--delay);
    transform: translate(-50%, -50%);
    pointer-events: none;
    z-index: 9999;
  }

  .imageList {
    display: none;
  }
</style>
 

Javascript — can be added to Code Block, Advanced Page Header Injection or Code Injection.

NOTE: no need to install JS library since this code is Vanilla

<script>
  document.addEventListener("DOMContentLoaded", function () {
    let images = Array.from(document.querySelector('.imageList')?.children || []);
    let lastImagePosition = { x: 0, y: 0 };
    let isAddingImage = false;

    function getDistance(x1, y1, x2, y2) {
      let dx = x2 - x1;
      let dy = y2 - y1;
      return Math.sqrt(dx * dx + dy * dy);
    }

    document.addEventListener('mousemove', function (event) {
      if (isAddingImage || images.length === 0) return;

      let distanceFromLast = getDistance(
        lastImagePosition.x,
        lastImagePosition.y,
        event.clientX,
        event.clientY
      );

      if (distanceFromLast < window.innerWidth / 20) return;

      isAddingImage = true;
      setTimeout(function () {
        let img = document.createElement('img');
        let randomImage = images[Math.floor(Math.random() * images.length)];
        if (!randomImage) return;

        img.src = randomImage.src;
        img.style.left = event.clientX + 'px';
        img.style.top = event.clientY + 'px';
        img.classList.add('droppedImage');

        img.addEventListener('animationend', function () {
          this.remove();
        });

        document.body.appendChild(img);
        lastImagePosition = { x: event.clientX, y: event.clientY };
        isAddingImage = false;
      }, 50);
    });
  });
</script>
Next
Next

Scrolling up text