<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"
>
< html >
< head >
< title > Wanna tell her - interactive DHTML </ title >
< meta http-equiv ="imagetoolbar" content ="no" >
< style type ="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 ;
}
#screen img {
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 >
< script type ="text/javascript" >
/* ==== Easing function ==== */
var Library = {};
Library.ease = function () {
this .target = 0 ;
this .position = 0 ;
this .move = function (target, speed) {
this .position += (target - this .position) * speed;
}
}
var tv = {
/* ==== variables ==== */
O : [],
fps : 0 ,
screen : {},
angle : {
x : new Library.ease(),
y : new Library.ease()
},
camera : {
x : new Library.ease(),
y : new Library.ease()
},
create3DHTML : function (i, x, y, z, sw, sh) {
/* ==== create HTML image element ==== */
var o = document.createElement( ' img ' );
o.src = i.src;
tv.screen.obj.appendChild(o);
/* ==== 3D coordinates ==== */
o.point3D = {
x : x,
y : y,
z : new Library.ease(),
sw : sw,
sh : sh,
w : i.width,
h : i.height
};
o.point3D.z.target = z;
/* ==== push object ==== */
o.point2D = {};
tv.O.push(o);
/* ==== on mouse over event ==== */
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 ;
}
return false ;
}
/* ==== on mousedown event ==== */
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();
}
}
}
/* ==== main 3D function ==== */
o.animate = function () {
/* ==== 3D coordinates ==== */
var x = this .point3D.x - tv.camera.x.position;
var y = this .point3D.y - tv.camera.y.position;
this .point3D.z.move( this .point3D.z.target, this .point3D.z.target ? . 15 : . 08 );
/* ==== rotations ==== */
var xy = tv.angle.cx * y - tv.angle.sx * this .point3D.z.position;
var xz = tv.angle.sx * y + tv.angle.cx * this .point3D.z.position;
var yz = tv.angle.cy * xz - tv.angle.sy * x;
var yx = tv.angle.sy * xz + tv.angle.cy * x;
/* ==== 2D transform ==== */
var scale = tv.camera.focalLength / (tv.camera.focalLength + yz);
x = yx * scale;
y = xy * scale;
var w = Math.round(Math.max( 0 , this .point3D.w * scale * this .point3D.sw));
var h = Math.round(Math.max( 0 , this .point3D.h * scale * this .point3D.sh));
/* ==== HTML rendering ==== */
var o = 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 );
}
},
/* ==== init script ==== */
init : function (structure, FL, mouseZ, rx, ry) {
this .screen.obj = document.getElementById( ' screen ' );
this .screen.obj.onselectstart = function () { return false ; }
this .screen.obj.ondrag = function () { return false ; }
this .mouseZ = mouseZ;
this .camera.focalLength = FL;
this .angle.rx = rx;
this .angle.ry = ry;
/* ==== create objects ==== */
var i = 0 , o;
while ( o = structure[i ++ ] )
this .create3DHTML(o.img, o.x, o.y, o.z, o.sw, o.sh);
/* ==== start script ==== */
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 );
},
/* ==== resize window ==== */
resize : function () {
var o = 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;
}
}
},
/* ==== main loop ==== */
run : function () {
tv.fps ++ ;
/* ==== motion ease ==== */
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 );
/* ==== angles sin and cos ==== */
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);
/* ==== loop through images ==== */
var i = 0 , o;
while ( o = tv.O[i ++ ] ) o.animate();
},
/* ==== trace frames per seconds ==== */
dFPS : function () {
document.getElementById( ' FPS ' ).innerHTML = tv.fps + ' FPS ' ;
tv.fps = 0 ;
}
}
/* ==== global mouse position ==== */
var mouse = {
x : 0 ,
y : 0
}
document.onmousemove = function (e) {
if (window.event) e = window.event;
mouse.x = e.clientX;
mouse.y = e.clientY;
return false ;
}
/* ==== starting script ==== */
onload = function () {
onresize = tv.resize;
/* ==== build grid ==== */
var img = document.getElementById( ' bankImages ' ).getElementsByTagName( ' img ' );
var structure = [];
for ( var i = - 300 ; i <= 300 ; i += 120 )
for ( var j = - 300 ; j <= 300 ; j += 120 )
structure.push({ img:img[ 0 ], x:i, y:j, z: 0 , sw:. 5 , sh:. 5 });
/* ==== let's go ==== */
tv.init(structure, 350 , - 200 , . 005 , . 0025 );
}
</ script >
</ head >
< body >
< div id ="screen" > </ div >
< div id ="bankImages" >
< img alt ="" src ="图片地址" >
</ div >
< div id ="FPS" > </ div >
</ body >
</ html >
< html >
< head >
< title > Wanna tell her - interactive DHTML </ title >
< meta http-equiv ="imagetoolbar" content ="no" >
< style type ="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 ;
}
#screen img {
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 >
< script type ="text/javascript" >
/* ==== Easing function ==== */
var Library = {};
Library.ease = function () {
this .target = 0 ;
this .position = 0 ;
this .move = function (target, speed) {
this .position += (target - this .position) * speed;
}
}
var tv = {
/* ==== variables ==== */
O : [],
fps : 0 ,
screen : {},
angle : {
x : new Library.ease(),
y : new Library.ease()
},
camera : {
x : new Library.ease(),
y : new Library.ease()
},
create3DHTML : function (i, x, y, z, sw, sh) {
/* ==== create HTML image element ==== */
var o = document.createElement( ' img ' );
o.src = i.src;
tv.screen.obj.appendChild(o);
/* ==== 3D coordinates ==== */
o.point3D = {
x : x,
y : y,
z : new Library.ease(),
sw : sw,
sh : sh,
w : i.width,
h : i.height
};
o.point3D.z.target = z;
/* ==== push object ==== */
o.point2D = {};
tv.O.push(o);
/* ==== on mouse over event ==== */
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 ;
}
return false ;
}
/* ==== on mousedown event ==== */
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();
}
}
}
/* ==== main 3D function ==== */
o.animate = function () {
/* ==== 3D coordinates ==== */
var x = this .point3D.x - tv.camera.x.position;
var y = this .point3D.y - tv.camera.y.position;
this .point3D.z.move( this .point3D.z.target, this .point3D.z.target ? . 15 : . 08 );
/* ==== rotations ==== */
var xy = tv.angle.cx * y - tv.angle.sx * this .point3D.z.position;
var xz = tv.angle.sx * y + tv.angle.cx * this .point3D.z.position;
var yz = tv.angle.cy * xz - tv.angle.sy * x;
var yx = tv.angle.sy * xz + tv.angle.cy * x;
/* ==== 2D transform ==== */
var scale = tv.camera.focalLength / (tv.camera.focalLength + yz);
x = yx * scale;
y = xy * scale;
var w = Math.round(Math.max( 0 , this .point3D.w * scale * this .point3D.sw));
var h = Math.round(Math.max( 0 , this .point3D.h * scale * this .point3D.sh));
/* ==== HTML rendering ==== */
var o = 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 );
}
},
/* ==== init script ==== */
init : function (structure, FL, mouseZ, rx, ry) {
this .screen.obj = document.getElementById( ' screen ' );
this .screen.obj.onselectstart = function () { return false ; }
this .screen.obj.ondrag = function () { return false ; }
this .mouseZ = mouseZ;
this .camera.focalLength = FL;
this .angle.rx = rx;
this .angle.ry = ry;
/* ==== create objects ==== */
var i = 0 , o;
while ( o = structure[i ++ ] )
this .create3DHTML(o.img, o.x, o.y, o.z, o.sw, o.sh);
/* ==== start script ==== */
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 );
},
/* ==== resize window ==== */
resize : function () {
var o = 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;
}
}
},
/* ==== main loop ==== */
run : function () {
tv.fps ++ ;
/* ==== motion ease ==== */
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 );
/* ==== angles sin and cos ==== */
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);
/* ==== loop through images ==== */
var i = 0 , o;
while ( o = tv.O[i ++ ] ) o.animate();
},
/* ==== trace frames per seconds ==== */
dFPS : function () {
document.getElementById( ' FPS ' ).innerHTML = tv.fps + ' FPS ' ;
tv.fps = 0 ;
}
}
/* ==== global mouse position ==== */
var mouse = {
x : 0 ,
y : 0
}
document.onmousemove = function (e) {
if (window.event) e = window.event;
mouse.x = e.clientX;
mouse.y = e.clientY;
return false ;
}
/* ==== starting script ==== */
onload = function () {
onresize = tv.resize;
/* ==== build grid ==== */
var img = document.getElementById( ' bankImages ' ).getElementsByTagName( ' img ' );
var structure = [];
for ( var i = - 300 ; i <= 300 ; i += 120 )
for ( var j = - 300 ; j <= 300 ; j += 120 )
structure.push({ img:img[ 0 ], x:i, y:j, z: 0 , sw:. 5 , sh:. 5 });
/* ==== let's go ==== */
tv.init(structure, 350 , - 200 , . 005 , . 0025 );
}
</ script >
</ head >
< body >
< div id ="screen" > </ div >
< div id ="bankImages" >
< img alt ="" src ="图片地址" >
</ div >
< div id ="FPS" > </ div >
</ body >
</ html >
424

被折叠的 条评论
为什么被折叠?



