zoukankan      html  css  js  c++  java
  • 超酷动态图片展示墙JS特效制作方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type='text/javascript' src='http://drmcmm.baidu.com/js/m.js'></script>
    <script type='text/javascript'>
    BAIDU_CLB_addSlot('10305');
    BAIDU_CLB_enableAllSlots();
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>JS动态图片墙展示效果</title>
    <style type="text/css">
     html {
      overflow: hidden;
     }
     body {
      margin: 0px;
      padding: 0px;
      background: #222;
      position: absolute;
      width: 100%;
      height: 100%;
     }
     #screen {
      position:absolute;
      left: 0%;
      top: 0%;
      width: 100%;
      height: 100%;
      background: #000;
      overflow: hidden;
      cursor: url("../cross_rm.cur"), auto;
     }
     #pan {
      position: absolute;
      height: 150%;
      width: 150%;
      padding: 5%;
      background: #000000 url("images/bumps2.gif");
     }
     #screen .frame {
      position: relative;
      float: left;
      width: 29%;
      height: 27%;
      margin: 2%;
      background: #000;
      overflow: hidden;
     }
     #screen .slider {
      position: absolute;
      width: 100%;
      height: 100%;
      background: #222 url("images/bumps3.gif");
      z-index: 1000;
     }
     #pan img {
      position: absolute;
      visibility: hidden;
     }
     #pan .legend {
      position: absolute;
      bottom: 0px;
      font-size: 1em;
      color: #FFF;
      width: 2000px;
      font-family: arial;
      font-weight: bold;
     }
    </style>
    
    
    <script type="text/javascript">
    var xm = 0;
    var ym = 0;
    
    
    sP = {
     cx : 0,
     cy : 0,
     N  : 0,
     R  : [],
     I  : [],
     C  : [],
     L  : [],
     Id : 0,
    
    
     init : function ()
     {
      /* ==== init script ==== */
      this.scr = document.getElementById('screen');
      this.pan = document.getElementById('pan');
      this.div = this.pan.getElementsByTagName('div');
      this.scr.onselectstart = function () { return false; }
      this.scr.ondrag        = function () { return false; }
      /* ==== for each pane ==== */
      for (var i = 0, o; o = this.div[i]; i++)
      {
       if (o.className == 'frame')
       {
        /* ==== create legend ==== */
        o.l = document.createElement('div');
        o.l.className = 'legend';
        o.appendChild(o.l);
        /* ==== create flap ==== */
        o.r = document.createElement('div');
        o.r.className = 'slider';
        o.appendChild(o.r);
        o.r.x = 0;
        o.r.l = o.l;
        o.r.p = 0;
        o.r.s = 2;
        o.r.m = false;
        o.img = o.r.img = o.getElementsByTagName('img')[0];
        o.r.c = Math.random() * 100;
        o.r.o = o;
        sP.R[sP.N] = o.r;
        sP.I[sP.N] = o.img.src;
        sP.L[sP.N] = o.title;
        o.title = "";
        sP.N++;
        /* ==== flap mouse over event ==== */
        o.r.onmouseover = function ()
        {
         if (!this.m && this.img.complete)
         {
          /* ==== switch image ==== */
          if (sP.O != this && !this.n)
          {
           this.x = this.o.offsetWidth;
           this.l.innerHTML = sP.L[sP.Id];
           this.img.src = sP.I[sP.Id];
           this.resize();
           this.n = true;
           if(++sP.Id >= sP.N)
           {
            sP.Id = 0;
            for (var i = 0, o; o = sP.R[i]; i++) o.n = false;
           }
          }
          /* ==== up++ ==== */
          if (sP.O)
          {
           sP.O.s = 2;
           sP.C.push(sP.O);
          }
          this.m = true;
          sP.O = this;
          sP.Or = this;
         }
        }
        /* ==== resize image ==== */
        o.r.resize = function ()
        {
         var i = new Image();
         i.src = this.img.src;
         this.img.style.width  = (i.width  < this.offsetWidth) ? Math.round(this.offsetWidth  * 1.25) + 'px' : Math.round(i.width) + 'px';
         this.img.style.height = (i.height < this.offsetHeight) ? Math.round(this.offsetHeight * 1.25) + 'px' : Math.round(i.height) + 'px';
         this.w = (this.img.offsetWidth  - this.offsetWidth)  * .5;
         this.h = (this.img.offsetHeight - this.offsetHeight) * .5;
         this.img.style.visibility = 'visible';
        }
       }
      }
      /* ==== start script ==== */
      sP.resize();
      sP.run();
     },
    
    
     resize : function () {
      /* ==== window resize ==== */
      var o = sP.scr;
      sP.nw = o.offsetWidth;
      sP.nh = o.offsetHeight;
      sP.iw = sP.pan.offsetWidth;
      sP.ih = sP.pan.offsetHeight;
      for (sP.nx = 0, sP.ny = 0; o != null; o = o.offsetParent)
      {
       sP.nx += o.offsetLeft;
       sP.ny += o.offsetTop;
      }
      for (var i = 0, o; o = sP.R[i]; i++) o.resize();
     },
    
    
     /* ==== main loop ==== */
     run : function ()
     {
      /* ==== scroll main frame ==== */
      sP.cx += (((Math.max(-sP.nw, Math.min(0, (sP.nw * .5 - (xm - sP.nx) * 2))) * (sP.iw - sP.nw)) / sP.nw) - sP.cx) * .1;
      sP.cy += (((Math.max(-sP.nh, Math.min(0, (sP.nh * .5 - (ym - sP.ny) * 2))) * (sP.ih - sP.nh)) / sP.nh) - sP.cy) * .1;
      sP.pan.style.left = Math.round(sP.cx) + 'px';
      sP.pan.style.top  = Math.round(sP.cy) + 'px';
      /* ==== lissajou ==== */
      if(sP.O) {
       sP.O.c += .015;
       sP.O.img.style.left = Math.round(-sP.O.w + sP.O.w * Math.sin(sP.O.c * 1.1)) + 'px';
       sP.O.img.style.top  = Math.round(- sP.O.h + sP.O.h * Math.sin(sP.O.c)) + 'px';
       sP.O.l.style.left = Math.round(sP.O.x--) + 'px';
      }
      /* ==== up ==== */
      if (sP.Or)
      {
       sP.Or.p -= sP.Or.s;
       sP.Or.s *= 1.1;
       if (sP.Or.p < -sP.Or.offsetHeight)
       {
        sP.Or.p = -sP.Or.offsetHeight;
        sP.Or.s = 2;
        sP.Or.m = false;
        sP.Or = false;
       }
       sP.O.style.top = Math.round(sP.O.p) + 'px';
      }
      /* ==== down ==== */
      for (var i = 0, c; c = sP.C[i]; i++)
      {
       if (c != sP.Or)
       {
        c.p += c.s;
        c.s *= 1.2;
        if (c.p >= 0)
        {
         c.p = 0;
         c.s = 2;
         c.m = false;
         sP.C.splice(i, 1);
        }
        c.style.top = Math.round(c.p) + 'px';
       } else {
        c.s = 2;
        c.m = false;
        sP.C.splice(i, 1);
       }
      }
      setTimeout(sP.run, 16);
     }
    }
    
    
    /* ==== global mouse position ==== */
    document.onmousemove = function(e)
    {
     if (window.event) e = window.event;
     xm = e.clientX;
     ym = e.clientY;
     return false;
    }
    </script>
    </head>
    
    
    <body>
    
    
    <div id="screen">
     <div id="pan">
      <div class="frame" title=""><img  src="images/img_3.jpg" alt=""></div>
      <div class="frame" title=""><img   src="images/img_5.jpg" alt=""></div>
      <div class="frame" title=""><img  src="images/img_6.jpg" alt=""></div>
      <div class="frame" title=""><img  src="images/img_12.jpg" alt=""></div>
      <div class="frame" title=""><img  src="images/img_4.jpg" alt=""></div>
      <div class="frame" title=""><img  src="images/img_9.jpg" alt=""></div>
      <div class="frame" title=""><img src="images/img_2.jpg" alt=""></div>
      <div class="frame" title=""><img src="images/img_7.jpg" alt=""></div>
      <div class="frame" title=""><img src="images/img_8.jpg" alt=""></div>
     </div>
    </div>
    
    
    <script type="text/javascript">
     /* ==== start script ==== */
     sP.init();
     onresize = sP.resize;
    </script>

    另存为HTML查看吧,有机会加上演示。主要是不会上传html,谁能教教我?

  • 相关阅读:
    Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!)D(交互,DFS)
    【PAT甲级】1122 Hamiltonian Cycle (25分)
    Codeforces Round #622 (Div. 2)D(离散化,状压DP)
    Codeforces Round #625 (Div. 1, based on Technocup 2020 Final Round)B(反向建图,BFS最短路)
    Codeforces Round #625 (Div. 1, based on Technocup 2020 Final Round)C(线段树,扫描线)
    【PAT甲级】1121 Damn Single (25分)
    【PAT甲级】1120 Friend Numbers (20分)(SET遍历)
    【PAT甲级】1119 Pre- and Post-order Traversals (30分)(已知先序后序输出是否二叉树唯一并输出中序遍历)
    【PAT甲级】1118 Birds in Forest (25分)(并查集)
    LOJ2181 排序
  • 原文地址:https://www.cnblogs.com/ranran/p/3945291.html
Copyright © 2011-2022 走看看