JS实现跟随鼠标立体翻转图片的方法
本文实例讲述了JS实现跟随鼠标立体翻转图片的方法。分享给大家供大家参考。具体实现方法如下:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Wannatellher-interactiveDHTML</title>
<metahttp-equiv="imagetoolbar"content="no">
<styletype="text/css">
html{
overflow:hidden;
}
body{
position:absolute;
margin:0px;
padding:0px;
background:#fff;
width:100%;
height:100%;
}
#screen{
position:absolute;
left:10%;
top:10%;
width:80%;
height:80%;
background:#fff;
}
#screenimg{
position:absolute;
cursor:pointer;
width:0px;
height:0px;
-ms-interpolation-mode:nearest-neighbor;
}
#bankImages{
visibility:hidden;
}
#FPS{
position:absolute;
right:5px;
bottom:5px;
font-size:10px;
color:#666;
font-family:verdana;
}
</style>
<scripttype="text/javascript">
/*====Easingfunction====*/
varLibrary={};
Library.ease=function(){
this.target=0;
this.position=0;
this.move=function(target,speed){
this.position+=(target-this.position)*speed;
}
}
vartv={
/*====variables====*/
O:[],
fps:0,
screen:{},
angle:{
x:newLibrary.ease(),
y:newLibrary.ease()
},
camera:{
x:newLibrary.ease(),
y:newLibrary.ease()
},
create3DHTML:function(i,x,y,z,sw,sh){
/*====createHTMLimageelement====*/
varo=document.createElement('img');
o.src=i.src;
tv.screen.obj.appendChild(o);
/*====3Dcoordinates====*/
o.point3D={
x:x,
y:y,
z:newLibrary.ease(),
sw:sw,
sh:sh,
w:i.width,
h:i.height
};
o.point3D.z.target=z;
/*====pushobject====*/
o.point2D={};
tv.O.push(o);
/*====onmouseoverevent====*/
o.onmouseover=function(){
if(this!=tv.o){
this.point3D.z.target=tv.mouseZ;
tv.camera.x.target=this.point3D.x;
tv.camera.y.target=this.point3D.y;
if(tv.o)tv.o.point3D.z.target=0;
tv.o=this;
}
returnfalse;
}
/*====onmousedownevent====*/
o.onmousedown=function(){
if(this==tv.o){
if(this.point3D.z.target==tv.mouseZ)this.point3D.z.target=0;
else{
tv.o=false;
this.onmouseover();
}
}
}
/*====main3Dfunction====*/
o.animate=function(){
/*====3Dcoordinates====*/
varx=this.point3D.x-tv.camera.x.position;
vary=this.point3D.y-tv.camera.y.position;
this.point3D.z.move(this.point3D.z.target,this.point3D.z.target?.15:.08);
/*====rotations====*/
varxy=tv.angle.cx*y-tv.angle.sx*this.point3D.z.position;
varxz=tv.angle.sx*y+tv.angle.cx*this.point3D.z.position;
varyz=tv.angle.cy*xz-tv.angle.sy*x;
varyx=tv.angle.sy*xz+tv.angle.cy*x;
/*====2Dtransform====*/
varscale=tv.camera.focalLength/(tv.camera.focalLength+yz);
x=yx*scale;
y=xy*scale;
varw=Math.round(Math.max(0,this.point3D.w*scale*this.point3D.sw));
varh=Math.round(Math.max(0,this.point3D.h*scale*this.point3D.sh));
/*====HTMLrendering====*/
varo=this.style;
o.left=Math.round(x+tv.screen.w-w*.5)+'px';
o.top=Math.round(y+tv.screen.h-h*.5)+'px';
o.width=w+'px';
o.height=h+'px';
o.zIndex=10000+Math.round(scale*1000);
}
},
/*====initscript====*/
init:function(structure,FL,mouseZ,rx,ry){
this.screen.obj=document.getElementById('screen');
this.screen.obj.onselectstart=function(){returnfalse;}
this.screen.obj.ondrag=function(){returnfalse;}
this.mouseZ=mouseZ;
this.camera.focalLength=FL;
this.angle.rx=rx;
this.angle.ry=ry;
/*====createobjects====*/
vari=0,o;
while(o=structure[i++])
this.create3DHTML(o.img,o.x,o.y,o.z,o.sw,o.sh);
/*====startscript====*/
this.resize();
mouse.y=this.screen.y+this.screen.h;
mouse.x=this.screen.x+this.screen.w;
/*====loop====*/
setInterval(tv.run,16);
setInterval(tv.dFPS,1000);
},
/*====resizewindow====*/
resize:function(){
varo=tv.screen.obj;
if(o){
tv.screen.w=o.offsetWidth/2;
tv.screen.h=o.offsetHeight/2;
for(tv.screen.x=0,tv.screen.y=0;o!=null;o=o.offsetParent){
tv.screen.x+=o.offsetLeft;
tv.screen.y+=o.offsetTop;
}
}
},
/*====mainloop====*/
run:function(){
tv.fps++;
/*====motionease====*/
tv.angle.x.move(-(mouse.y-tv.screen.h-tv.screen.y)*tv.angle.rx,.1);
tv.angle.y.move((mouse.x-tv.screen.w-tv.screen.x)*tv.angle.ry,.1);
tv.camera.x.move(tv.camera.x.target,.025);
tv.camera.y.move(tv.camera.y.target,.025);
/*====anglessinandcos====*/
tv.angle.cx=Math.cos(tv.angle.x.position);
tv.angle.sx=Math.sin(tv.angle.x.position);
tv.angle.cy=Math.cos(tv.angle.y.position);
tv.angle.sy=Math.sin(tv.angle.y.position);
/*====loopthroughimages====*/
vari=0,o;
while(o=tv.O[i++])o.animate();
},
/*====traceframesperseconds====*/
dFPS:function(){
document.getElementById('FPS').innerHTML=tv.fps+'FPS';
tv.fps=0;
}
}
/*====globalmouseposition====*/
varmouse={
x:0,
y:0
}
document.onmousemove=function(e){
if(window.event)e=window.event;
mouse.x=e.clientX;
mouse.y=e.clientY;
returnfalse;
}
/*====startingscript====*/
onload=function(){
onresize=tv.resize;
/*====buildgrid====*/
varimg=document.getElementById('bankImages').getElementsByTagName('img');
varstructure=[];
for(vari=-300;i<=300;i+=120)
for(varj=-300;j<=300;j+=120)
structure.push({img:img[0],x:i,y:j,z:0,sw:.5,sh:.5});
/*====let'sgo====*/
tv.init(structure,350,-200,.005,.0025);
}
</script>
</head>
<body>
<divid="screen"></div>
<divid="bankImages">
<imgalt=""src="images/p2.jpg">
</div>
<divid="FPS"></div>
</body>
</html>
希望本文所述对大家的javascript程序设计有所帮助。