[JavaScript]3D球状导航的文章分类

3D球状导航实现
本文介绍了一种利用HTML和JavaScript实现的3D球状导航效果,点击分类标题可弹出对应文章列表。通过动态调整元素位置和大小,形成3D球面布局。

前几天写了左边这个3D球状导航的文章分类,这里对实现细节做个简单记录。

效果:

分类标题呈现3D球状效果,点击分类标题的时候,会弹出这个分类对应的推荐文章列表。

效果截图:

2010070523342688.png2010070523584819.png

HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< div  id="mainList">
     < div  id="list">
         < ul >
             < li >< a  class="HTML" onclick="ClickLink(this)" href="#">HTML</ a ></ li >
             < li >< a  class="CSS" onclick="ClickLink(this)" href="#">CSS</ a ></ li >
             < li >< a  class="JS" onclick="ClickLink(this)" href="#">JavaScript</ a ></ li >
             < li >< a  class="AJAX" onclick="ClickLink(this)" href="#">Ajax</ a ></ li >
             < li >< a  class="ASPNET" onclick="ClickLink(this)" href="#">Asp.net</ a ></ li >
             < li >< a  class="CSHARP" onclick="ClickLink(this)" href="#">C#</ a ></ li >
             < li >< a  class="DEBUG" onclick="ClickLink(this)" href="#">Debugging</ a ></ li >
             < li >< a  class="PERF" onclick="ClickLink(this)" href="#">Performance</ a ></ li >
             < li >< a  class="ARCHITERT" onclick="ClickLink(this)" href="#">Architect</ a ></ li >
         </ ul >
     </ div

核心JS:动态生成3D球状云+弹出模式窗体-articlemap.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
$( function () {
 
     var  element = $( '#list a' ); ;
     var  offset = 0;
     var  stepping = 0.02;
     var  list = $( '#list' );
     var  $list = $(list)
 
     $list.mousemove( function (e) {
         var  topOfList = $list.eq(0).offset().top
         var  listHeight = $list.height()
         stepping = (e.clientY - topOfList) / listHeight * 0.2 - 0.1;
 
     });
 
     for  ( var  i = element.length - 1; i >= 0; i--) {
         element[i].elemAngle = i * Math.PI * 2 / element.length;
     }
 
     setInterval(render, 50);
 
     function  render() {
         for  ( var  i = element.length - 1; i >= 0; i--) {
 
             var  angle = element[i].elemAngle + offset;
 
             x = 120 + Math.sin(angle) * 30;
             y = 45 + Math.cos(angle) * 40;
             size = Math.round(15 - Math.sin(angle) * 15);
 
             var  elementCenter = $(element[i]).width() / 2;
 
             var  leftValue = (($list.width() / 2) * x / 100 - elementCenter) + "px"
 
             $(element[i]).css( "fontSize" , size + "pt" );
             $(element[i]).css( "opacity" , size / 100);
             $(element[i]).css( "zIndex" , size);
             $(element[i]).css( "left" , leftValue);
             $(element[i]).css( "top" , y + "%" );
         }
 
         offset += stepping;
     }
 
});
 
function  ClickLink(item) {
     var  typName = $(item).text();
 
     var  links = null ;
 
     switch  (typName) {
         case  "HTML" :
             links = TrainLinks(Links.HTML);
             break ;
         case  "CSS" :
             links = TrainLinks(Links.CSS);
             break ;
         case  "JavaScript" :
             links = TrainLinks(Links.JavaScript);
             break ;
         case  "Ajax" :
             links = TrainLinks(Links.Ajax);
             break ;
         case  "Asp.net" :
             links = TrainLinks(Links.Aspnet);
             break ;
         case  "C#" :
             links = TrainLinks(Links.CSharp);
             break ;
         case  "Debugging" :
             links = TrainLinks(Links.Debugging);
             break ;
         case  "Performance" :
             links = TrainLinks(Links.Performance);
             break ;
         case  "Architect" :
             links = TrainLinks(Links.Architect);
             break ;
     }
 
     CommonHelper.showNoBtnAlert(typName, links);
}
 
function  TrainLinks(arr) {
     var  links = "这个可以有,暂时还没有!" ;
     if  (arr.length > 0) {
         links = '<div><ul>' ;
     }
     for  (i = 0, j = arr.length; i < j; i++) {
         links += '<li><a target="_blank" href="'  + arr[i][0] + '">'  + arr[i][1] + '</a></li>' ;
     }
     if  (arr.length > 0) {
         links += '</ul></div>' ;
     }
 
     return  links;
}

辅助存储推荐文章列表的JS(未来通过修改这个文件来维护推荐文章):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var  Links = {
     HTML: [],
     CSS: [[ "http://www.cnblogs.com/justinw/archive/2010/06/16/1758922.html" , "制作50个超棒动画效果教程" ]],
     JavaScript: [
     [ "http://www.cnblogs.com/justinw/archive/2009/11/27/1611728.html" , "[原创]AjaxControlToolkitTests自动测试框架完全解析之一:架构篇 " ],
     [ "http://www.cnblogs.com/justinw/archive/2009/11/30/1613391.html" , "[原创]AjaxControlToolkitTests自动测试框架完全解析之二:实现篇(1) " ],
     [ "http://www.cnblogs.com/justinw/archive/2009/12/02/1615382.html" , "[JavaScript] 使用document.createDocumentFragment优化性能 " ],
     ],
     Ajax: [],
     Aspnet: [],
     CSharp: [],
     ......
     Performance: [
     [ "http://www.cnblogs.com/justinw/archive/2009/11/26/1611397.html" , "[推荐]前端性能分析工具:dynaTrace Ajax Edition" ]
     ]
}

其他:

这里还引用了jQuery UI的Dialog和一些自定义的CSS设置,具体参考实例即可。

下载源代码下载源代码


本文转自Justin博客园博客,原文链接:http://www.cnblogs.com/justinw/archive/2010/07/06/1771759.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值