基于jquery的3d效果实现代码


Posted in Javascript onMarch 23, 2011
<html> 
<head> 
<script type="text/javascript" src="http://demo.3water.com/jslib/jquery/jquery-1.4.2.min.js"></script><style> 
.s_c{ 
position:relative; 
width:800px; 
height:300px; 
border:1px solid #000; 
overflow:hidden; 
} 
</style> 
<script type="text/javascript"> 
var Sl=Sl||{}; 
(function(){ 
var undefined; 
function box(o){ 
var d=$.extend({},{ 
'w':40, 
'h':30, 
'secne':null, 
'data':'' 
},o); 
if(d.secne==null||!d.secne) return; 
this.div=$("<div></div>").css({'position': 'absolute','border':'1px solid #cde','left':'0px','top':'0px'}).html(d.data); 
this.w(d.w); 
this.h(d.h); 
this._ow=this.w(); 
this._oh=this.h(); 
$(d.secne).append(this.div); 
return this; 
} 
box.prototype.zoomw=function(v){ 
if(v==undefined){ 
this._zw=this._zw||1; 
return this._zw; 
} 
this.w(this.ow()*v,false); 
this._zw=v; 
return this; 
} 
box.prototype.zoomh=function(v){ 
if(v==undefined){ 
this._zh==this._zh||1; 
return this._zh; 
} 
this.h(this.oh()*v,false); 
this._zh=v; 
return this; 
} 
box.prototype.x=function(x){ 
if(x==undefined){ 
this._x=this._x||0; 
return this._x; 
} 
this.div.css({ 
left:x-(this.w())/2 
}) 
this._x=x; 
return this; 
} 
box.prototype.y=function(y){ 
if(y==undefined){ 
this._y=this._y||0; 
return this._y; 
} 
this.div.css({ 
top:y-(this.h())/2 
}) 
this._y=y; 
return this; 
} 
box.prototype.ow=function(){ 
return this._ow||0; 
} 
box.prototype.oh=function(){ 
return this._oh||0; 
} 
box.prototype.w=function(w,rs){ 
if(w==undefined){ 
w=this.div.css('width'); 
w=w=='auto'?this.div.width():w; 
return parseInt(w); 
} 
if(rs!==false) 
this._ow=w; 
this.mx(-(w-this.w())/2); 
this.div.css({'width':w}); 
return this; 
} 
box.prototype.h=function(h,rs){ 
if(h==undefined){ 
h=this.div.css('height'); 
h=h=='auto'?this.div.height():h; 
return parseInt(h); 
} 
if(rs!==false) 
this._oh=h; 
this.my(-(h-this.h())/2); 
this.div.css({'height':h}); 
return this; 
} 
box.prototype.mx=function(x){ 
var div=this.div; 
div.css({'left': parseInt(div.css('left'))+x}); 
} 
box.prototype.my=function(y){ 
var div=this.div; 
div.css({'top':parseInt(div.css('top'))+y}); 
} 
box.prototype.z=function(z){ 
if(z==undefined) 
return this.div.css('z-index'); 
this.div.css("z-index",z); 
return this; 
} 
//3d box 
function box3d(o){ 
if(!$(o.secne))return; 
secne=o.secne; 
var secne=this.secne=$(secne); 
this.vx= parseInt(secne.css('width')=='auto'?secne.width():secne.css('width'))/2; 
this.vy= parseInt(secne.css('height')=='auto'?secne.height():secne.css('height'))/2; 
this.fl=o.fl||250; 
this.box=new box(o).z(0); 
this._set3d(); 
return this; 
} 
box3d.prototype.x=function(x){ 
if(x==undefined) 
return this._x||0; 
this._x=x||0; 
this._set3d(); 
return this; 
} 
box3d.prototype.y=function(y){ 
if(y==undefined) 
return this._y||0; 
this._y=y||0; 
this._set3d(); 
return this; 
} 
box3d.prototype.z=function(z){ 
if(z==undefined) 
return this._z||0; 
this._z=z||0; 
this._set3d(); 
return this; 
} 
box3d.prototype._set3d=function(){ 
var boxo=this.box; 
var fl=this.fl; 
var zomx=fl/(fl+this.z()); 
var x=this.vx+zomx*this.x(); 
var y=this.vy+zomx*this.y(); 
boxo.zoomw(zomx).zoomh(zomx); 
boxo.x(x); 
boxo.y(y); 
} 

// 
function slide(o){ 
var d=$.extend({},{ 
'z':100, 
'secne':null 
},o); 
if(d.secne==null||!$(d.secne))return; 
this.cecne=d.secne; 
this.z=d.z; 
this.sleep=0.02; 
var k={'secne':d.secne,'w':80,'h':50,fl:1000}; 
this.box=[]; 
var c=8; 
for(var i=0;i<c;i++){ 
var t= parseInt(i-c/2); 
var a=$('<div></div>').css({ 
width:'100%', 
height:'100%', 
background:'#777' 
}) 
k.data=a; 
var ubox=new box3d(k).z(300); 
this.r(ubox,t/2); 
this.box.push(ubox); 
} 
this.re_index(); 
} 
slide.prototype._moveaction=function(){ 
var _this=this; 
var s=this.sleep; 
for(var i=0;i<this.box.length;i++){ 
this.r(this.box[i],s); 
} 
this.re_index(); 
} 
slide.prototype.r=function(rbox,s){ 
if(!(rbox instanceof box3d)) 
return; 
var X=rbox.x(); 
var Y=rbox.y() 
var Z=rbox.z(); 
var New_X = X*Math.cos(s) - Z*Math.sin(s); 
var New_Z = X*Math.sin(s) + Z*Math.cos(s); 
var New_Y = Y; 
rbox.x(New_X); 
rbox.y(New_Y); 
rbox.z(New_Z); 
} 
slide.prototype.re_index=function(){ 
var arr=this.box; 
var s=arr.length; 
for(var j=0;j<s-1;j++){ 
for(var i=0;i<s-j-1;i++){ 
if(arr[i].z()<arr[i+1].z()){ 
var c=arr[i]; 
arr[i]=arr[i+1]; 
arr[i+1]=c; 
} 
} 
} 
for(var i=0;i<arr.length;i++){ 
arr[i].box.z(i) 
} 
} 
slide.prototype.start=function(){ 
this.run=1; 
this._move(); 
} 
slide.prototype.stop=function(){ 
this.run=0; 
} 
slide.prototype._move=function(s){ 
var _this=this; 
setTimeout(function(){ 
if(!_this.run){ 
return; 
} 
_this._moveaction(); 
_this._move(); 
},50) 
} 
Sl.slide=slide; 
})() 
$(function(){ 
var s=new Sl.slide({secne:'.s_c'}); 
$('#start').click(function(){s.start()}) 
$('#stop').click(function(){s.stop()}) 
}) 
</script> 
</head> 
<body> 
<div class='s_c'></div> 
<button id="start">start</button> 
<button id="stop">stop</button> 
</body> 
</html>
Javascript 相关文章推荐
收集的10个免费的jQuery相册
Feb 26 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
js获得网页背景色和字体色的方法
Mar 21 Javascript
javascript中scrollTop详解
Apr 13 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
浅析Bootstrip的select控件绑定数据的问题
May 10 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
动态创建Angular组件实现popup弹窗功能
Sep 15 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
Postman如何实现参数化执行及断言处理
Jul 28 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 #Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 #Javascript
jquery图片上下tab切换效果
Mar 18 #Javascript
javascript一些实用技巧小结
Mar 18 #Javascript
jquery获取下拉列表的值为null的解决方法
Mar 18 #Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
Mar 17 #Javascript
javascript定时保存表单数据的代码
Mar 17 #Javascript
You might like
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Django中同时使用多个配置文件的方法
2015/07/22 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
python实现弹跳小球
2019/05/13 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
Linux文件系统类型
2012/02/15 面试题
安全员岗位职责
2013/11/11 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
党员转正介绍人意见
2015/06/03 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
诚信考试主题班会
2015/08/17 职场文书