jquery 3D球状导航的文章分类


Posted in Javascript onJuly 06, 2010

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

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

jquery 3D球状导航的文章分类

HTML:

<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
$(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(未来通过修改这个文件来维护推荐文章):
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设置,具体参考实例即可。
下载源代码
Javascript 相关文章推荐
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
将json对象转换为字符串的方法
Feb 20 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
JS获取当前时间戳方法解析
Aug 29 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 #Javascript
JavaScript经典效果集锦
Jul 06 #Javascript
前端开发必须知道的JS之原型和继承
Jul 06 #Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
Jul 06 #Javascript
一个基于jquery的图片切换效果
Jul 06 #Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 #Javascript
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 #Javascript
You might like
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
js获取页面description的方法
2015/05/21 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
宝宝周岁宴答谢词
2014/01/26 职场文书
汉语言文学职业规划
2014/02/14 职场文书
销售顾问岗位职责
2014/02/25 职场文书
给校长的一封建议书
2014/03/12 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
行政管理专业求职信
2014/07/06 职场文书
音乐幼师求职信
2014/07/09 职场文书
房屋买卖协议样本
2014/11/16 职场文书
歼十出击观后感
2015/06/11 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书