三维立体图片效果

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>三维立体-图片相册效果</title>
<style type="text/css">
    html
{
        overflow
: hidden;
   
}

    body
{
        position
: absolute;
        margin
: 0px;
        padding
: 0px;
        background
: #111;
        width
: 100%;
        height
: 100%;
   
}

    #screen
{
        position
: absolute;
        left
: 10%;
        top
: 10%;
        width
: 80%;
        height
: 80%;
        background
: #000;
   
}

    #screen img
{
        position
: absolute;
        cursor
: pointer;
        visibility
: hidden;
        width
: 0px;
        height
: 0px;
   
}

    #screen .tvover
{
        border
: solid #876;
        opacity
: 1;
        filter
: alpha(opacity=100);
   
}

    #screen .tvout
{
        border
: solid #fff;
        opacity
: 0.7;
   
}

    #bankImages
{
        display
: none;
   
}

</style>
<script type="text/javascript">
var Library ={};
Library.ease
=function () {
   
this.target =0;
   
this.position =0;
   
this.move =function (target, speed)
   
{
       
this.position += (target -this.position) * speed;
    }

}

var tv ={
    O : [],
    screen :
{},
    grid :
{
        size       :
4
        borderSize :
6
        zoomed     :
false
    }
,
    angle :
{
        x :
new Library.ease(),
        y :
new Library.ease()
    }
,
    camera :
{
        x    :
new Library.ease(),
        y    :
new Library.ease(),
        zoom :
new Library.ease(),
        focalLength :
750
    }
,
    init :
function ()
   
{
       
this.screen.obj = document.getElementById('screen');
       
var img = document.getElementById('bankImages').getElementsByTagName('img');
       
this.screen.obj.onselectstart =function () { returnfalse; }
       
this.screen.obj.ondrag        =function () { returnfalse; }
       
var ni =0;
       
var n = (tv.grid.size /2) - .5;
       
for (var y =-n; y <= n; y++)
       
{
           
for (var x =-n; x <= n; x++)
           
{
               
var o = document.createElement('img');
               
var i = img[(ni++) % img.length];
                o.className
='tvout';
                o.src
= i.src;
                tv.screen.obj.appendChild(o);
                o.point3D
={
                    x  : x,
                    y  : y,
                    z  :
new Library.ease()
                }
;
                o.point2D
={};
                o.ratioImage
=1;
                tv.O.push(o);
                o.onmouseover
=function ()
               
{
                   
if (!tv.grid.zoomed)
                   
{
                       
if (tv.o)
                       
{
                            tv.o.point3D.z.target
=0;
                            tv.o.className
='tvout';
                        }

                       
this.className ='tvover';
                       
this.point3D.z.target =-.5;
                        tv.o
=this;
                    }

                }

                o.onclick
=function ()
               
{
                   
if (!tv.grid.zoomed)
                   
{
                        tv.camera.x.target
=this.point3D.x;
                        tv.camera.y.target
=this.point3D.y;
                        tv.camera.zoom.target
= tv.screen.w *1.25;
                        tv.grid.zoomed
=this;
                    }
else{
                       
if (this== tv.grid.zoomed){
                            tv.camera.x.target
=0;
                            tv.camera.y.target
=0;
                            tv.camera.zoom.target
= tv.screen.w / (tv.grid.size + .1);
                            tv.grid.zoomed
=false;
                        }

                    }

                }

                o.calc
=function ()
               
{
                   
this.point3D.z.move(this.point3D.z.target, .5);
                   
var x = (this.point3D.x - tv.camera.x.position) * tv.camera.zoom.position;
                   
var y = (this.point3D.y - tv.camera.y.position) * tv.camera.zoom.position;
                   
var z =this.point3D.z.position * tv.camera.zoom.position;
                   
var xy = tv.angle.cx *- tv.angle.sx * z;
                   
var xz = tv.angle.sx *+ tv.angle.cx * z;
                   
var yz = tv.angle.cy * xz - tv.angle.sy * x;
                   
var yx = tv.angle.sy * xz + tv.angle.cy * x;
                   
this.point2D.scale = tv.camera.focalLength / (tv.camera.focalLength + yz);
                   
this.point2D.x = yx *this.point2D.scale;
                   
this.point2D.y = xy *this.point2D.scale;
                   
this.point2D.w = Math.round(
                                       Math.max(
                                        
0,
                                        
this.point2D.scale * tv.camera.zoom.position * .8
                                       )
                                     );
                   
if (this.ratioImage >1)
                       
this.point2D.h = Math.round(this.point2D.w /this.ratioImage);
                   
else
                   
{
                       
this.point2D.h =this.point2D.w;
                       
this.point2D.w = Math.round(this.point2D.h *this.ratioImage);
                    }

                }

                o.draw
=function ()
               
{
                   
if (this.complete)
                   
{
                       
if (!this.loaded)
                       
{
                           
if (!this.img)
                           
{
                               
this.img =new Image();
                               
this.img.src =this.src;
                            }

                           
if (this.img.complete)
                           
{
                               
this.style.visibility ='visible';
                               
this.ratioImage =this.img.width /this.img.height;
                               
this.loaded =true;
                               
this.img =false;
                            }

                        }

                       
this.style.left = Math.round(
                                           
this.point2D.x *this.point2D.scale +
                                            tv.screen.w
-this.point2D.w * .5
                                          )
+'px';
                       
this.style.top  = Math.round(
                                           
this.point2D.y *this.point2D.scale +
                                            tv.screen.h
-this.point2D.h * .5
                                          )
+'px';
                       
this.style.width  =this.point2D.w +'px';
                       
this.style.height =this.point2D.h +'px';
                       
this.style.borderWidth = Math.round(
                                                   Math.max(
                                                    
this.point2D.w,
                                                    
this.point2D.h
                                                   )
* tv.grid.borderSize * .01
                                                 )
+'px';
                       
this.style.zIndex = Math.floor(this.point2D.scale *100);
                    }

                }

            }

        }

        tv.resize();
        mouse.y
= tv.screen.y + tv.screen.h;
        mouse.x
= tv.screen.x + tv.screen.w;
        tv.run();
    }
,
    resize :
function ()
   
{
       
var o = tv.screen.obj;
        tv.screen.w
= o.offsetWidth /2;
        tv.screen.h
= o.offsetHeight /2;
        tv.camera.zoom.target
= tv.screen.w / (tv.grid.size + .1);
       
for (tv.screen.x =0, tv.screen.y =0; o !=null; o = o.offsetParent)
       
{
            tv.screen.x
+= o.offsetLeft;
            tv.screen.y
+= o.offsetTop;
        }

    }
,
    run :
function ()
   
{
        tv.angle.x.move(
-(mouse.y - tv.screen.h - tv.screen.y) * .0025, .1);
        tv.angle.y.move( (mouse.x
- tv.screen.w - tv.screen.x) * .0025, .1);
        tv.camera.x.move(tv.camera.x.target, tv.grid.zoomed
? .25 : .025);
        tv.camera.y.move(tv.camera.y.target, tv.grid.zoomed
? .25 : .025);
        tv.camera.zoom.move(tv.camera.zoom.target, .
05);
        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);
       
for (var i =0, o; o = tv.O[i]; i++)
       
{
            o.calc();
            o.draw();
        }

        setTimeout(tv.run,
32);
    }

}

var mouse ={
    x :
0,
    y :
0
}

document.onmousemove
=function(e)
{
   
if (window.event) e = window.event;
    mouse.x
= e.clientX;
    mouse.y
= e.clientY;
   
returnfalse;
}

</script>
</head>
<body>
<div id="screen"></div>
<div id="bankImages">
   
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/WanTianwen/382001/o_14.jpg">
   
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/WanTianwen/382001/o_3.jpg">
   
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/WanTianwen/382001/o_16.png">
   
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/WanTianwen/382001/o_8.jpg">
   
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/WanTianwen/382001/o_1.bmp">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/e202d467c6ba813545582b56f04c2a1d.jpg">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/74c3e07acebb6f854c7e9a221177edd5.jpg">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/4949b3aaef68c61cc8779413e0c0e477.jpg">
   
<img alt="" src="http://images10.51.com/b/200610/e6/78/wantianwen/e6170b2c57f87d02692be0e611034813.jpg">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/6a06a243639859776453c64a95f7b686.jpg">
   
<img alt="" src="http://cache45.51.com/photo5/e6/78/wantianwen/098ca589bb50843df84318baa649191a.jpg">
   
<img alt="" src="http://cache45.51.com/photo5/e6/78/wantianwen/8a935979e6f3d757ed4c5020ed3155aa.jpg">
   
<img alt="" src="http://cache45.51.com/photo5/e6/78/wantianwen/006e96a581ccd4f1d52f4cceb803f622.jpg">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/9066f5ceb52a3d9eba534c001c8fc62a.jpg">
   
<img alt="" src="http://cache33.51.com/photo2/e6/78/wantianwen/f5ed5b422236332ef28c5fe36e0e61f3.jpg">
   
<img alt="" src="http://cache18.51.com/photo/e6/78/wantianwen/1150462594548.jpg">
   
<img alt="" src="http://cache18.51.com/photo/e6/78/wantianwen/1150461892572.jpg">
</div>
<script type="text/javascript">
    onresize
= tv.resize;
    tv.init();
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/kaiwanlin/p/3527254.html