Persistent Bomb


Description: A bomb (or in this case, a fire) follows the cursor around the screen. When it reaches the cursor, the image switches into the explosion.

First, save the following images


Then copy the code into the document:

<script>
picFollow = new Image();
picFollow.src = "bomb.gif";
picExplosion = new Image();
picExplosion.src = "explode.gif";
document.onmousemove = getMousePosition;
document.onmouseout = pauseBomb;
document.write("<div id=\"diva\" style=\"position:absolute\">");
document.write("<img name=\"pic\"src=" + picFollow.src + "></div>");
var picX = 20;
var picY = 100;
var step = 10;
var speed = 100;
var tolerance = step/2 +1;
var mouseX = 0;
var mouseY = 0;
var mouseOut = true;
var followMouse = false;
myInterval = setInterval('moveBomb()', speed);
function pauseBomb() {
mouseOut = true;
}
function getMousePosition(e) {
mouseX = window.event.x + document.body.scrollLeft;
mouseY = window.event.y + document.body.scrollTop;
mouseOut = false;
if (followMouse) {
diva.style.left = mouseX - pic.width / 2;
diva.style.top = mouseY - pic.height / 2;
   }
}
function calcNewPos() {
if (mouseX == picX)
return;
arg = (mouseY-picY) / (mouseX-picX);
mult = 1;
if (mouseX - picX < 0)
mult = -1;
alpha = Math.atan(arg);
dx = mult * step * Math.cos(alpha);
dy = mult * step * Math.sin(alpha);
picX += dx;
picY += dy;
}
function collision() {
if ((Math.abs(picX-mouseX) < tolerance) && (Math.abs(picY-mouseY) < tolerance) && (!mouseOut))
return true;
return false;
}
function hideAnimation() {
diva.style.visibility = "hidden";
}
function moveBomb() {
calcNewPos();
window.status = "("+mouseX+","+mouseY+")";
diva.style.left = picX - pic.width / 2;
diva.style.top = picY - pic.height / 2;
if (collision()) {
clearInterval(myInterval);
pic.src = picExplosion.src;
followMouse = true;
setTimeout('hideAnimation()', 2000);
   }
}
</script>