[JavaScript]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,如需转载请自行联系原作者

相关文章
|
21天前
|
JavaScript 前端开发 Python
分享77个JS菜单导航,总有一款适合您
分享77个JS菜单导航,总有一款适合您
22 0
|
21天前
|
JavaScript iOS开发 Python
分享114个JS菜单导航,总有一款适合您
分享114个JS菜单导航,总有一款适合您
35 0
|
21天前
|
移动开发 JavaScript 前端开发
分享113个JS菜单导航,总有一款适合您
分享113个JS菜单导航,总有一款适合您
50 0
|
21天前
|
JavaScript
js实现图片3D轮播效果(收藏)
js实现图片3D轮播效果(收藏)
33 0
|
7月前
|
JSON 前端开发 Java
Mock.js之Element-ui搭建首页导航与左侧菜单
Mock.js之Element-ui搭建首页导航与左侧菜单
50 0
|
9月前
|
JavaScript 开发者 容器
Vue Router:构建交互性Vue.js应用的导航之道
在Vue.js应用程序开发中,导航是一个关键概念,它允许用户在不同视图之间进行无缝切换和交互。而Vue Router是Vue.js官方提供的路由管理库,为开发者提供了强大的工具来管理应用程序的导航和路由。在本博客中,我们将深入研究Vue Router的概念、核心功能、工作原理,以及如何使用Vue Router来构建具有高度交互性的Vue.js应用。
60 0
|
9月前
|
JavaScript 前端开发 索引
用Three.js搞个炫酷3D地球
地球人怎么可以不会画地球!从canvas画地球贴图开始,用Three.js手把手教你实现一个炫酷的3D地球!
用Three.js搞个炫酷3D地球
|
21天前
|
移动开发 JavaScript 前端开发
分享111个JS菜单导航,总有一款适合您
分享111个JS菜单导航,总有一款适合您
83 0
|
21天前
|
JavaScript 开发工具 git
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
Three.js封装了WebGL的底层细节,是一款运行在浏览器中的 3D 引擎,可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象,目前在Git上已经拥有90k+的star。
41 0
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
|
21天前
|
JavaScript
JS中如何制作面包屑导航
JS中如何制作面包屑导航
30 0