js实现图片3D轮播效果(收藏)

简介: js实现图片3D轮播效果(收藏)

3D的图片轮播效果很炫,写到这里只是为了不丢代码,不为别的。

效果预览:

html代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js实现3D图片逐张轮播幻灯片</title>
</head>
<body>
<style>
ul#bcty365_nav{padding-left:50px; margin-bottom:10px; border-bottom:2px solid #ccc; overflow:hidden; _zoom:1;}
ul#bcty365_nav li{float:left; display:inline; margin:10px;}
ul#bcty365_nav li a{display:block;color:#000000; font-size:16px;}
ul#bcty365_nav li a,#wimoban_p,#wimoban_p a{ font-family:"微软雅黑";}
ul#bcty365_nav li a:hover,#wimoban_p a:hover{color:red;}
</style>  
<style type="text/css">
*{margin:0;padding:0;list-style-type:none;}
a,img{border:0;}
body{font:12px/180% Arial, Helvetica, sans-serif,"新宋体";}
/* focus_Box */
#focus_Box{position:relative;width:710px;height:500px;margin:20px auto;}
#focus_Box ul{position:relative;width:710px;height:500px}
#focus_Box li{z-index:0;position:absolute; width:0px;background:#787878;height:0px;top:146px;cursor:pointer;left:377px;border-radius:4px;box-shadow:1px 1px 12px rgba(200, 200, 200, 1)}
#focus_Box li img{width:100%;background:url(../img/3D轮播效果/loading.gif) no-repeat center 50%;height:100%;vertical-align:top}
#focus_Box li p{position:absolute;left:0;bottom:0px;width:100%;height:40px;line-height:40px;background:url(images/float-bg.png) repeat;text-indent:8px;color:#fff;}
#focus_Box li p span{display:inline-block;width:70%;height:40px;overflow:hidden;}
#focus_Box .prev,#focus_Box .next{display:block;z-index:100;overflow:hidden;cursor:pointer;position:absolute;width:52px;height:52px;top:131px;}
/*#focus_Box .prev{background:url(../img/3D轮播效果/btn.png) left bottom no-repeat;left:0px}
#focus_Box .next{background:url(../img/3D轮播效果/btn.png) right bottom no-repeat;right:0px} */
#focus_Box .prev:hover{background-position:left top;}
#focus_Box .next:hover{background-position:right top;}
/*#focus_Box a.imgs-scroll-btn{display:block;position:absolute;z-index:110;top:7px;right:15px;width:51px;height:23px;overflow:hidden;background:url(images/share-btn.png) no-repeat;text-indent:-999px;}*/
</style>
<script src="../js/3D轮播效果/ZoomPic.js"></script>
<div id="focus_Box">
  <span class="prev"> </span>
  <span class="next"> </span>
  <ul>
    <li>
      <a href="#"><img width="600" height="450"   src="../img/3D轮播效果/cat1.jpg" /></a>
    </li>
    <li>
      <a href="#"><img width="600" height="450"   src="../img/3D轮播效果/cat2.jpg" /></a>
    </li>
    <li>
      <a href="#"><img width="600" height="450"   src="../img/3D轮播效果/cat3.jpg" /></a>
    </li>
    <li>
      <a href="#"><img width="600" height="450"   src="../img/3D轮播效果/cat4.jpg" /></a>
    </li>
    <li>
      <a href="#"><img width="600" height="450"   src="../img/3D轮播效果/cat5.jpg" /></a>
    </li>
  </ul>
</div>
<div style="text-align:center;clear:both">
</div>
</body>
</html>

js代码:

function ZoomPic ()
{
  this.initialize.apply(this, arguments)  
}
ZoomPic.prototype = 
{
  initialize : function (id)
  {
    var _this = this;
    this.wrap = typeof id === "string" ? document.getElementById(id) : id;
    this.oUl = this.wrap.getElementsByTagName("ul")[0];
    this.aLi = this.wrap.getElementsByTagName("li");
    this.prev = this.wrap.getElementsByTagName("span")[0];
    this.next = this.wrap.getElementsByTagName("span")[1];
    this.timer = 1000;
    this.aSort = [];
    this.iCenter = 2;
    this._doPrev = function () {return _this.doPrev.apply(_this)};
    this._doNext = function () {return _this.doNext.apply(_this)};
    this.options = [
      /*{width:476, height:210, top:40, left:0, zIndex:1},
      {width:426, height:250, top:20, left:50, zIndex:2},
      {width:654, height:290, top:0, left:150, zIndex:3},
      {width:426, height:250, top:20, left:480, zIndex:2},
      {width:476, height:210, top:40, left:476, zIndex:1},*/
      {width:365, height:252, top:40, left:0, zIndex:1},
      {width:405, height:280, top:20, left:60, zIndex:2},
      {width:445, height:308, top:0, left:130, zIndex:3},
      {width:405, height:280, top:20, left:240, zIndex:2},
      {width:366, height:252, top:40, left:345, zIndex:1},
    ];
    for (var i = 0; i < this.aLi.length; i++) this.aSort[i] = this.aLi[i];
    this.aSort.unshift(this.aSort.pop());
    this.setUp();
    this.addEvent(this.prev, "click", this._doPrev);
    this.addEvent(this.next, "click", this._doNext);
    this.doImgClick();    
    this.timer = setInterval(function ()
    {
      _this.doNext()  
    }, 3000);   
    this.wrap.onmouseover = function ()
    {
      clearInterval(_this.timer)  
    };
    this.wrap.onmouseout = function ()
    {
      _this.timer = setInterval(function ()
      {
        _this.doNext()  
      }, 3000); 
    }
  },
  doPrev : function ()
  {
    this.aSort.unshift(this.aSort.pop());
    this.setUp()
  },
  doNext : function ()
  {
    this.aSort.push(this.aSort.shift());
    this.setUp()
  },
  doImgClick : function ()
  {
    var _this = this;
    for (var i = 0; i < this.aSort.length; i++)
    {
      this.aSort[i].onclick = function ()
      {
        if (this.index > _this.iCenter)
        {
          for (var i = 0; i < this.index - _this.iCenter; i++) _this.aSort.push(_this.aSort.shift());
          _this.setUp()
        }
        else if(this.index < _this.iCenter)
        {
          for (var i = 0; i < _this.iCenter - this.index; i++) _this.aSort.unshift(_this.aSort.pop());
          _this.setUp()
        }
      }
    }
  },
  setUp : function ()
  {
    var _this = this;
    var i = 0;
    for (i = 0; i < this.aSort.length; i++) this.oUl.appendChild(this.aSort[i]);
    for (i = 0; i < this.aSort.length; i++)
    {
      this.aSort[i].index = i;
      if (i < 5)
      {
        this.css(this.aSort[i], "display", "block");
        this.doMove(this.aSort[i], this.options[i], function ()
        {
          _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()
          {
            _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()
            {
              _this.aSort[_this.iCenter].onmouseover = function ()
              {
                _this.doMove(this.getElementsByTagName("div")[0], {bottom:0})
              };
              _this.aSort[_this.iCenter].onmouseout = function ()
              {
                _this.doMove(this.getElementsByTagName("div")[0], {bottom:-100})
              }
            })
          })
        });
      }
      else
      {
        this.css(this.aSort[i], "display", "none");
        this.css(this.aSort[i], "width", 0);
        this.css(this.aSort[i], "height", 0);
        this.css(this.aSort[i], "top", 37);
        this.css(this.aSort[i], "left", this.oUl.offsetWidth / 2)
      }
      if (i < this.iCenter || i > this.iCenter)
      {
        this.css(this.aSort[i].getElementsByTagName("img")[0], "opacity", 100)
        this.aSort[i].onmouseover = function ()
        {
          _this.doMove(this.getElementsByTagName("img")[0], {opacity:100})  
        };
        this.aSort[i].onmouseout = function ()
        {
          _this.doMove(this.getElementsByTagName("img")[0], {opacity:100})
        };
        this.aSort[i].onmouseout();
      }
      else
      {
        this.aSort[i].onmouseover = this.aSort[i].onmouseout = null
      }
    }   
  },
  addEvent : function (oElement, sEventType, fnHandler)
  {
    return oElement.addEventListener ? oElement.addEventListener(sEventType, fnHandler, false) : oElement.attachEvent("on" + sEventType, fnHandler)
  },
  css : function (oElement, attr, value)
  {
    if (arguments.length == 2)
    {
      return oElement.currentStyle ? oElement.currentStyle[attr] : getComputedStyle(oElement, null)[attr]
    }
    else if (arguments.length == 3)
    {
      switch (attr)
      {
        case "width":
        case "height":
        case "top":
        case "left":
        case "bottom":
          oElement.style[attr] = value + "px";
          break;
        case "opacity" :
          oElement.style.filter = "alpha(opacity=" + value + ")";
          oElement.style.opacity = value / 100;
          break;
        default :
          oElement.style[attr] = value;
          break
      } 
    }
  },
  doMove : function (oElement, oAttr, fnCallBack)
  {
    var _this = this;
    clearInterval(oElement.timer);
    oElement.timer = setInterval(function ()
    {
      var bStop = true;
      for (var property in oAttr)
      {
        var iCur = parseFloat(_this.css(oElement, property));
        property == "opacity" && (iCur = parseInt(iCur.toFixed(2) * 100));
        var iSpeed = (oAttr[property] - iCur) / 5;
        iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
        if (iCur != oAttr[property])
        {
          bStop = false;
          _this.css(oElement, property, iCur + iSpeed)
        }
      }
      if (bStop)
      {
        clearInterval(oElement.timer);
        fnCallBack && fnCallBack.apply(_this, arguments)  
      }
    }, 30)
  }
};
window.onload = function ()
{
  new ZoomPic("focus_Box");
};

收藏一下。


相关文章
|
4月前
|
前端开发 JavaScript API
使用 JavaScript 实现图片上传
使用 JavaScript 实现图片上传
126 1
|
10天前
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
36 2
|
2月前
|
JavaScript
js文字如何轮播?
js文字如何轮播?
15 1
|
3月前
|
JavaScript 前端开发
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
|
4月前
|
JavaScript
js文字如何轮播?
js文字如何轮播?
31 2
|
4月前
|
编解码 缓存 算法
Three.js如何降低3D模型的大小以便更快加载
为加快600MB的3D模型在Three.js中的加载速度,可采用多种压缩方法:1) 减少顶点数,使用简化工具或LOD技术;2) 压缩纹理,降低分辨率或转为KTX2等格式;3) 采用高效文件格式如glTF 2.0及draco压缩;4) 合并材质减少数量;5) 利用Three.js内置优化如BufferGeometry;6) 按需分批加载模型;7) Web Workers后台处理;8) 多模型合并减少绘制;9) 使用Texture Atlas及专业优化工具。示例代码展示了使用GLTFLoader加载优化后的模型。
501 12
|
4月前
|
存储 JavaScript 前端开发
小白实战!用JS实现一个3D翻书效果,附上代码
小白实战!用JS实现一个3D翻书效果,附上代码
|
4月前
|
JavaScript 前端开发
JS - 如何上传 Base64 编码的图片
本文展示了如何将Base64编码的图片在前端转换为Blob对象,并使用`FormData`上传到服务器端的方法。
199 0
|
4月前
|
JavaScript
js之图片上传
js之图片上传
82 0