Code:
<!DOCTYPE html>
<html>
<head>
<title>Googly Eyes - Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- The following googly eyes script was updated to make it cross browser compatible by makh5gsv at freelancer.com -->
<!-- Original: demigod@psxexchange.com -->
<!-- Web Site: http://www.psxexchange.com -->
<!-- currently hosted at javascriptsource.com -->
<!-- Updated Mar/10/2012 by jscheuer1 see: http://www.dynamicdrive.com/forums/showthread.php?t=67914 -->
<script>
;(function(){
var whites = 'whites.gif'; // set path to whites of the eyes image
var pupil = 'pupil.gif'; // set path to pupil image
var lastex = 200; // set iniital coords (lastex = horizontal, lastey = vertical)
var lastey = 100;
var ieEvent = typeof event !== 'undefined' && !window.opera, eyeContainer, addEvent, ex = 0, ey = 0,
ae, le, re, x0, y0, tid, realx, realy, s, r, dy1, dy2, dx1, dx2, rx, ry;
function ieCompatMode(){
return document.compatMode && document.compatMode === 'CSS1Compat'? document.documentElement : document.body;
}
function navMove(e){
eyeContainer.style.visibility = '';
e = window.event || e;
if(e.type === 'mouseover' && window.removeEventListener){setTimeout(function(){removeEventListener('mouseover', navMove);}, 0);}
if(e.type === 'scroll' && typeof e.pageX !== 'number' && typeof e.clientX !== 'number'){
lastex = ex = lastex + pageXOffset;
lastey = ey = lastey + pageYOffset;
} else {
lastex = ex = typeof e.pageX === 'number'? e.pageX : e.clientX + ieCompatMode().scrollLeft;
lastey = ey = typeof e.pageY === 'number'? e.pageY : e.clientY + ieCompatMode().scrollTop;
}
lastex -= window.pageXOffset || 0;
lastey -= window.pageYOffset || 0;
moveEyes();
}
function moveEyes(){
dy1 = ey - y0 - 20;
dx1 = ex - x0 - 20;
dx2 = ex - x0 - 60;
r = Math.sqrt(dx1 * dx1 + dy1 * dy1);
if (r < 20) {r = 20;}
dx1 = dx1 * 10 / r + x0 + 10;
dy2 = dy1 * 10 / r + y0 + 10;
r = Math.sqrt(dx2 * dx2 + dy1 * dy1);
if (r < 20) {r = 20;}
dx2 = dx2 * 10 / r + x0 + 50;
ae.left = x0 + 'px';
ae.top = y0 + 'px';
le.left = dx1 + 'px';
le.top = dy2 + 'px';
re.left = dx2 + 'px';
re.top = dy2 + 'px';
}
function setHandlers(){
var divs = eyeContainer.getElementsByTagName('div');
y0 = 100;
x0 = 200;
ae = divs[0].style;
le = divs[1].style;
re = divs[2].style;
addEvent(document, 'mousemove', navMove);
addEvent(window, 'scroll', navMove);
if(!ieEvent){
addEvent(window, 'mouseover', navMove);
setTimeout(function(){window.scrollBy(1, 1); window.scrollBy(-1, -1);}, 0);
}
realx = x0 + 0.1;
realy = y0 + 0.1;
moveAll();
}
function moveAll(){
rx = realx + 40;
ry = realy + 40;
rx += (ex - rx) * 0.1;
ry += (ey - ry) * 0.1;
realx = rx - 40;
realy = ry - 40;
x0 = Math.round(realx);
y0 = Math.round(realy);
moveEyes();
tid = setTimeout(moveAll, 100);
}
function placeEyes(e){
var x = lastex, y = lastey;
ex = x + 40;
ey = y + 40;
s = '<div style="position: absolute;' +
'top: ' + y + 'px; left: ' + x + 'px;"><img style="display: block;" alt="" src=' +
'"' + whites + '"></div>';
s += '<div style="position: absolute; ' +
'top: ' + (y + 10) + 'px; left: ' + (x + 10) + 'px;">' +
'<img style="display: block;" alt="" src="' + pupil + '"></div>';
s += '<div style="position: absolute; ' +
'top: ' + (y + 10) + 'px; left: ' + (x + 50) + 'px;">' +
'<img style="display: block;" alt="" src="' + pupil + '"></div>';
eyeContainer = document.createElement("div");
if(ieEvent){eyeContainer.style.visibility = 'hidden';}
document.body.appendChild(eyeContainer);
eyeContainer.innerHTML = s;
setHandlers();
}
function clearEyes(){tid && clearTimeout(tid);}
addEvent = (function(){
return ieEvent && window.attachEvent? function(el, ev, f){
el.attachEvent('on' + ev, f);
} : window.addEventListener? function(el, ev, f){
el.addEventListener(ev, f, false);
} : function(){return;};
})();
addEvent(window, 'load', placeEyes);
addEvent(window, 'unload', clearEyes);
})();
</script>
</head>
<body>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</body>
</html>
There's one subtle difference between IE and the others, but it's hard to notice and not very material. Can you tell what it is?
Bookmarks