JS实现 类似图片3D效果
其实这样的效果 目前很多网站上都有 其实以前也写过一个 只是当时代码只是为了实现而已,代码很乱,所以现在有业余时间研究了下,其实也并没有什么特殊地方 很类似于左右控制按钮切换图片的思路。效果如下:

可能录制的时候 有点卡 。
具体思路: 1. 首先和左右箭头切换图片思路是一模一样的 点击下一页按钮时候 外层容器left = 一张图片的宽度×当前的索引index 同理 点击上一页按钮也一样 然后加点动画效果改变相对应的宽度和高度 就可以实现。思路其实很简单的。所以就半斤八两就写了一个,希望各位高手包涵啊!所以也没有什么好解释的地方。直接上代码,下面有源码附件 具体的可以看看源码。
HTML代码如下:
<div class="slider">
<a href="javascript:void(0);" class="prev btn"></a>
<div class="scroll">
<ul class="scrollContainer">
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/1.jpg" />
<span>Alexander McQueen秋季1</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/2.jpg" />
<span>Gustavsson演绎朋克的性感</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/3.jpg" />
<span>Alexander McQueen秋季3</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/4.jpg" />
<span>Alexander McQueen秋季4</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/5.jpg" />
<span>Alexander McQueen秋季5</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/6.jpg" />
<span>Alexander McQueen秋季6</span>
</a>
</li>
<li class="panel">
<a href="" class="inside" target="_blank">
<img width="230" height="288" alt="Alexander McQueen秋季" src="data:images/7.jpg" />
<span>Alexander McQueen秋季7</span>
</a>
</li>
</ul>
</div>
<a href="javascript:void(0);" class="next btn"></a>
</div>
CSS代码如下:
<style>
*{margin:;padding:;list-style-type:none;}
a,img{border:;}
body{font:12px/180% Arial, Helvetica, sans-serif, "新宋体";}
a{color:#000;outline:none;text-decoration:none;}
a:hover{text-decoration:underline;}
/* slider */
.slider{width:730px;height:312px;overflow:hidden;position:relative;margin:20px auto 0;}
.scroll{float:left;display:inline;width:660px;height:312px;margin-left:30px;overflow:hidden;position:relative;}
.scrollContainer{position: relative;left:0px;}
.scrollContainer .current .inside{width:230px;height:288px;} .scrollContainer .panel{width:170px;height:235px;float: left;padding-right:30px;overflow:hidden;} .panel .inside{display:block;position:relative; }
.inside img{height:100%;width:100%;}
.scroll li .inside span{
position:absolute;
bottom:0px;
left:16px;
width:197px;
height:37px;
line-height:37px;
display:none;
background-color:#c69;
font-size:14px;color:#FFF;
text-align:center;
z-index:;
}
.scroll li.current .inside span{display:block;} .slider a.btn{background:url('images/index.png') no-repeat;}
.slider a.btn{float:left;margin-top:92px;width:20px; height:39px; } .slider a.prev{background-position:0 -61px;}
.slider a.prev:hover{background-position:0 -102px;} .slider a.next{right:;background-position:-50px -61px;}
.slider a.next:hover{background-position:-50px -102px;} .scrollContainer .current {width:230px;height:312px;}
</style>
JS代码如下:
/*
* JS 3D效果
* @author tugenhua
* @date 2013-11-28
* @email 879083421@qq.com
*/
function LeftAndRight(options) { this.config = {
container : '.slider', // 最外层容器
scrollContainer : '.scrollContainer', // 外层容器ul
prevBtn : 'prev', // 上一页按钮
nextBtn : 'next', // 下一页按钮
currentCls : 'current', // 当前的类名
addItemWidth : 70, // 中间突出增加的宽度
changeBeforeWH : {width:'170px',height:'235px'}, // 改变前的宽度和高度
changeAfterWH : {width:'230px',height:'312px'}, // 改变后的宽度和高度
callback : null // 每次点击后的回调函数 @param 当前的第几个
}; this.cache = {
curIndex : 0 // 保存当前li的索引
}; this.init(options);
} LeftAndRight.prototype = { constructor: LeftAndRight, init: function(options) {
this.config = $.extend(this.config, options || {});
var self = this,
_config = self.config,
_cache = self.cache; // 初始化计算ul的宽度
self._calculateUlWidth(); // 所有事件
self._bindEnv();
},
_calculateUlWidth: function(){
var self = this,
_config = self.config,
_cache = self.cache; if($(_config.scrollContainer) && $(_config.scrollContainer + ' li').length > 0){ $(_config.scrollContainer).each(function(index,item){ var liWidth = $('li',item).outerWidth(),
liLen = $('li',item).length; // 初始化时候 让中间的li 增加class current
var centerLi = $('li',item)[_cache.curIndex + 1]; $(centerLi).animate({'width':_config.changeAfterWH.width,'height':_config.changeAfterWH.height}); $(item).css("width",liWidth * liLen + _config.addItemWidth);
}); }
},
_bindEnv: function() {
var self = this,
_config = self.config,
_cache = self.cache; if($(_config.container).length > 0) { $(_config.container).each(function(index,item){ // 事件代理
$(item).unbind('click');
$(item).bind('click',function(e){ var target = e.target; // 目前点击元素小于3个 用if else判断 否则的话 建议用switch
if($(target).hasClass(_config.prevBtn)){
self._prev($(this)); }else if($(target).hasClass(_config.nextBtn)){
self._next($(this)); }else { }
});
});
}
},
_prev: function(container){
var self = this,
_config = self.config,
_cache = self.cache; if(_cache.curIndex < 1) {
return;
}
_cache.curIndex--;
self._publicMethod(_cache.curIndex,container); },
_next: function(container){
var self = this,
_config = self.config,
_cache = self.cache; _cache.curIndex++; $(_config.scrollContainer).each(function(index,item){
var liLen = $('li',item).length;
if(_cache.curIndex >= liLen -2) {
_cache.curIndex = liLen -3;
return;
}
self._publicMethod(_cache.curIndex,container);
}); },
_publicMethod: function(curIndex,container){
var self = this,
_config = self.config,
_cache = self.cache; $(_config.scrollContainer,container).each(function(index,item){
var liWidth = $('li',item).outerWidth(),
liHeight = $('li',item).outerHeight(),
liLen = $('li',item).length; self._prevNextProcess({ulContainer:item,liW:liWidth,liH:liHeight,liLen:liLen,index:curIndex});
});
},
_prevNextProcess: function(cfg) {
var self = this,
_config = self.config,
_cache = self.cache; var curLi = $('li',cfg.ulContainer)[cfg.index + 1];
$('li',cfg.ulContainer).each(function(index,item){
$(item).css({'width':_config.changeBeforeWH.width,'height':_config.changeBeforeWH.height});
});
$(curLi).animate({'width':_config.changeAfterWH.width,'height':_config.changeAfterWH.height});
$(cfg.ulContainer).animate({'left':-cfg.index * cfg.liW},function(){ });
var cindex = cfg.index + 2;
_config.callback && $.isFunction(_config.callback) && _config.callback(cindex); }
};
// 初始化代码
$(function(){
new LeftAndRight({
callback: function(index){
//console.log(index);
}
});
});
JS实现 类似图片3D效果的更多相关文章
- 网页3D效果库Three.js初窥
网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...
- 使用Three.js网页引擎创建酷炫的3D效果的标签墙
使用Three.js引擎(这是开源的webgl三维引擎,gitgub)进行一个简单应用. 做一个酷炫的3d效果的标签墙(已经放在我的博客首页,大屏幕可见), 去我的博客首页看看实际效果 www.son ...
- WPF 图片浏览 伪3D效果
原文:WPF 图片浏览 伪3D效果 首先上效果图: 因项目要求,需要把图片以"好看"."炫"的效果展示出来,特地研究了一下WPF关于3D方面的制作,奈何最终成果 ...
- css3 3D效果
css3 3D变形 transfrom初学 这个礼拜学了css3 3d,感觉到css无穷的魅力,可以通过几个特定的代码符号创建出3D效果的页面. ___ 透视 一个元素需要一个透视点才能激活3D空间, ...
- 一篇文章搞定css3 3d效果
css3 3d学习心得 卡片反转 魔方 banner图 首先我们要学习好css3 3d一定要有一定的立体感 通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了. 首先先给大家看一个小例子: 卡 ...
- CSS3新特性2D、3D效果讲解
希望这篇博客可以对你有所帮助,如果有什么技术上的问题,希望我们可以做进一步的交流,如果你觉得我哪里阐述的不正确或者你有更好的更透彻的理解,也可以联系我,我在这里随时等着你. 对于css/html是每个 ...
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
序:这段时间忙于奔波,好久没有更新了,今天更新一下,继续上节课的完善讲解,算是对前段时间的一个总结吧.披星戴月的时光也算有点应用效果了. 对于webgl(three.js)性能这一块我在上节课< ...
- CSS3,3D效果轮播图
---恢复内容开始--- 大家还记得我昨天的3D拖拽立方体吗??我昨天还说过css还可以做轮播图,所以咱们今天就写一下,css的轮播图吧! ....这个轮播图主要是用CSS3里的transform的旋 ...
- echart.gl.js实现动态3D柱状图
echart.gl.js实现动态3D柱状图 一.总结 一句话总结:演示页面的源代码里面一定有所需的所有的js. 二.[js实践篇]——echart.gl.js实现动态3D柱状图 前言 本公司的项目需求 ...
随机推荐
- Redis-五种数据类型解析
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- Jquery动态设置下拉框selected --(2018 08/12-08/26周总结)
1.Jquery动态根据内容设置下拉框selected 需求就是根据下拉框的值动态的设置为selected,本以为很简单,网上一大推的方法,挨着尝试了之后却发现没有一个是有用的.网上的做法如下: &l ...
- django-分页paginator
分页 Django提供了一些类来帮助你管理分页的数据 -- 也就是说,数据被分在不同页面中,并带有“上一页/下一页”标签.这些类位于 django/core/paginator.py 中. 示例 向 ...
- JS 关于this p9
关于this这个货,常常让我感到头疼,也很难说清这货到底是什么机制,今天就详细记录一下this,了解他就跟理解闭包差不多,不理解的时候我们会感到很难受总想着避开他,当我们真正理解之后,会有种茅塞顿开的 ...
- HTML5 简单归纳 -- 前端知识 (二)
HTML5 全屏事件 全屏事件:requestFullScreen 关闭全屏:cancelFullScreen 判断是否全屏:fullScreenElement 注意:现各大主流浏览器中由于内核不同的 ...
- js柯里化
这篇文章讲的很好啊~例子很好 http://www.zhangxinxu.com/wordpress/2013/02/js-currying/ 这篇是讲函数式编程的,其中也有涉及到,说明了柯里化是一种 ...
- SD从零开始38-40
[原创]SD从零开始38 创建Billing Document 根据需要BillingBilling On Request 你可以通过手工输入凭证的号码(订单号码和Delivery note,依赖于你 ...
- Android Studio 使用AChartEngine制作饼图
前言: 在很多项目中都会使用到图表,具体表现形式为饼图.折线图.柱状图等,但是网上有很多图表架包都是需要收费的,而Google的AChartEngine是免费的,于是AChartEngine就变成了首 ...
- [JAVA] 重写以及@Override标签
以前JAVA看的少,最近做项目,对@Override的调用顺序有点疑惑,故查了一些资料.既然查资料了,那就把能看到的知识点整理一下,以供日后学习. 原文地址请保留http://www.cnblogs. ...
- python3+unittest+HTMLTestRunner
参考博客1 参考博客2 python3版HTMLTestRunner.py见博客园‘链接’(已经上传到博客园) import unittest class operatinon_unittest(un ...