添加到QQ书签 | 设为首页 | 加入收藏 | 繁體中文 | 网站地图
 | 网站首页 | QQ空间大图 | QQ空间FLASH模块 | QQ闪字表情 | QQ系列 | QQ下载 | 博客系列 | 完美图片 | 游戏秘籍 | 基础教程 | 
 | 精美字体 | 精品娃娃 | 个性签名 | 动感图片 | 制作素材 | 边框线条 | 视频·搞笑图片 | 基础知识 | 网页设计 | 
推 荐 阅 读
  • 没有推荐文章
  • 阅 读 排 行
    ·网页鼠标特效:在鼠标后面…
    ·在文本框默认自动输入当前…
    ·网页图片特效:图片动态水…
    ·网页鼠标特效:黑暗火光
    ·CSS基础知识:样式表CSS中…
    ·PHP源代码:图片加入文字…
    ·PHP源代码:Email图片生成
    ·CSS解决图片下有空隙
    ·纯CSS制作的网页中的ligh…
    ·网页图片鼠标动作特效:图…
    ·在线处理示意等待的AJAX动…
    ·11个图片上传加水印PHP源…
    ·CSS实现排版段落前面空两…
    ·网页时间特效:漂亮的脚本…
    ·PHP源代码:在图片上添加…
    ·DIV和CSS排版中制作细线条…
    ·CSS样式表参考:常用的CS…
    ·CSS优化:网页技术CSS的f…
    ·网页相册图片特效:矩阵鼠…
    ·PHP创建文字图片源码
     
    网页相册图片特效:矩阵旋转图列 【字体:
     您现在的位置: QQ宝页站 >> 网页设计 >> 常用特效代码 >> 正文 添加到百度搜藏 添加到QQ书签
     作者:佚名    文章来源:收录    点击数:    更新时间:2008-10-8  

    矩阵旋转图列

    观看效果

    <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 = {
     /* ==== variables ==== */
     O : [],
     screen : {},
     grid : {
      size       : 4,  // 4x4 grid
      borderSize : 6,  // borders size
      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 // camera Focal Length
     },

     /* ==== init script ==== */
     init : function ()
     {
      this.screen.obj = document.getElementById('screen');
      var img = document.getElementById('bankImages').getElementsByTagName('img');
      this.screen.obj.onselectstart = function () { return false; }
      this.screen.obj.ondrag        = function () { return false; }
      /* ==== create images grid ==== */
      var ni = 0;
      var n = (tv.grid.size / 2) - .5;
      for (var y = -n; y <= n; y++)
      {
       for (var x = -n; x <= n; x++)
       {
        /* ==== create HTML image element ==== */
        var o = document.createElement('img');
        var i = img[(ni++) % img.length];
        o.className = 'tvout';
        o.src = i.src;
        tv.screen.obj.appendChild(o);
        /* ==== 3D coordinates ==== */
        o.point3D = {
         x  : x,
         y  : y,
         z  : new Library.ease()
        };
        /* ==== push object ==== */
        o.point2D = {};
        o.ratioImage = 1;
        tv.O.push(o);
        /* ==== on mouse over event ==== */
        o.onmouseover = function ()
        {
         if (!tv.grid.zoomed)
         {
          if (tv.o)
          {
           /* ==== mouse out ==== */
           tv.o.point3D.z.target = 0;
           tv.o.className = 'tvout';
          }
          /* ==== mouse over ==== */
          this.className = 'tvover';
          this.point3D.z.target = -.5;
          tv.o = this;
         }
        }
        /* ==== on click event ==== */
        o.onclick = function ()
        {
         if (!tv.grid.zoomed)
         {
          /* ==== zoom in ==== */
          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){
           /* ==== zoom out ==== */
           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;
          }
         }
        }
        /* ==== 3D transform function ==== */
        o.calc = function ()
        {
         /* ==== ease mouseover ==== */
         this.point3D.z.move(this.point3D.z.target, .5);
         /* ==== assign 3D coords ==== */
         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;
         /* ==== perform rotations ==== */
         var xy = tv.angle.cx * y  - tv.angle.sx * z;
         var xz = tv.angle.sx * y  + tv.angle.cx * z;
         var yz = tv.angle.cy * xz - tv.angle.sy * x;
         var yx = tv.angle.sy * xz + tv.angle.cy * x;
         /* ==== 2D transformation ==== */
         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
                            )
                          );
         /* ==== image size ratio ==== */
         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);
         }
        }
        /* ==== rendering ==== */
        o.draw = function ()
        {
         if (this.complete)
         {
          /* ==== paranoid image load ==== */
          if (!this.loaded)
          {
           if (!this.img)
           {
            /* ==== create internal image ==== */
            this.img = new Image();
            this.img.src = this.src;
           }
           if (this.img.complete)
           {
            /* ==== get width / height ratio ==== */
            this.style.visibility = 'visible';
            this.ratioImage = this.img.width / this.img.height;
            this.loaded = true;
            this.img = false;
           }
          }
          /* ==== HTML rendering ==== */
          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);
         }
        }
       }
      }
      /* ==== start script ==== */
      tv.resize();
      mouse.y = tv.screen.y + tv.screen.h;
      mouse.x = tv.screen.x + tv.screen.w;
      tv.run();
     },

     /* ==== resize window ==== */
     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;
      }
     },

     /* ==== main loop ==== */
     run : function ()
     {
      /* ==== motion ease ==== */
      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);
      /* ==== 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 all images ==== */
      for (var i = 0, o; o = tv.O[i]; i++)
      {
       o.calc();
       o.draw();
      }
      /* ==== loop ==== */
      setTimeout(tv.run, 32);
     }
    }

    /* ==== 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;
    }

    </script>
    </head>

    <body>

    <div id="screen"></div>

    <div id="bankImages">
     <img alt="" src="images/wi23.jpg">
     <img alt="" src="images/wt06.jpg">
     <img alt="" src="images/wt47.jpg">
     <img alt="" src="images/wt16.jpg">

     <img alt="" src="images/wt43.jpg">
     <img alt="" src="images/wt19.jpg">
     <img alt="" src="images/wt27.jpg">
     <img alt="" src="images/wt46.jpg">

     <img alt="" src="images/wt14.jpg">
     <img alt="" src="images/wt21.jpg">
     <img alt="" src="images/wt35.jpg">
     <img alt="" src="images/wt48.jpg">

     <img alt="" src="images/wt55.jpg">
     <img alt="" src="images/wt40.jpg">
     <img alt="" src="images/wt53.jpg">
     <img alt="" src="images/wt25.jpg">

    </div>

    <script type="text/javascript">
     /* ==== start script ==== */
     onresize = tv.resize;
     tv.init();
    </script>

    </body>
    </html>


    Google
     
    文章录入:丹峰    责任编辑:丹峰 
  • 上一篇文章:

  • 下一篇文章:
  •  
    设为首页 / 加入收藏 / 联系站长 / 友情链接 / 本站动态 / 用户留言 / 版权申明
    QQ宝页站 www.QQBye.com 信息备案:粤ICP备06124483号