jQuery实现径向动画菜单效果


Posted in Javascript onJuly 17, 2015

最终效果:

jQuery实现径向动画菜单效果

在径向菜单的制作前,首先需要知道几点知识点:

Math.sin(x)      x 的正玄值。返回值在 -1.0 到 1.0 之间;

Math.cos(x)    x 的余弦值。返回的是 -1.0 到 1.0 之间的数;

这两个函数中的X 都是指的“弧度”而非“角度”,弧度的计算公式为: 2*PI/360*角度,使用js表示是这样的:Math.PI/180*度数(1度=180/Math.PI)

如:30° 角度 的弧度 = 2*PI/360*30

如何计算圆上任何点坐标(用于计算出子菜单相对于圆的位置)

jQuery实现径向动画菜单效果

以父容器左上角为圆点,建立坐标系

代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<title>径向菜单的制作</title>
<meta charset="utf-8"/>
<meta name="keywords" content="" />
<meta name="description" content="" />
<script type="text/javascript" src="jquery.js"></script> <!--此处需引入jquery文件-->
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
background-color: #292a38;
font-family: "Microsoft Yahei";
}
h1 {
margin-top: 20px;
text-align: center;
color: #fff;
} 
.navWrap {
position: relative;
width: 200px;
height: 200px;
margin: 50px auto;
border: 2px dotted #4e5061;
border-radius: 50%;
}
.navWrap .main-nav {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);/*分别向左上移动元素对象的50%,保证居中*/
width: 40px;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
text-decoration: none;
color: #fff;
border-radius: 3px;
text-shadow: 1px 1px 0px #000;
background: #15a5f3;
cursor: pointer;
} 
.navWrap nav {
position: absolute;
width: 100%;
height: 100%;
transform: scale(0);
transition: all 0.5s ease-out;
opacity: 0;
} 
.navWrap.active nav {
transform: scale(1);
opacity: 1;
}
.navWrap nav > a{
position: absolute;
width: 30px;
height: 30px;
background: #f44283;
text-align: center;
line-height: 30px;
text-decoration: none;
color: #fff;
border-radius: 3px;
text-shadow: 1px 1px 0px #000;
transform: translate(-50%,-50%);
} 
</style>
</head> 
<body>

<h1>径向动画菜单效果演示</h1>

<div class="navWrap">
<nav>
<a>1</a>
<a>2</a>
<a>3</a>
<a>4</a>
<a>5</a>
<a>6</a>
<a>7</a>
<a>8</a>
</nav>
<a class="main-nav">点我</a>
</div>

<script type="text/javascript">
$(document).ready(function() {
var isLocated = false; //防止重复初始化子菜单位置
$(".navWrap").on('click', '.main-nav', function(event) {
event.preventDefault();
var me = $(this);
var navWrap = me.closest('.navWrap');
var nav = navWrap.find('nav a');
if(!navWrap.hasClass('active')&&!isLocated){ 
//Y=R+Rsinθ
//X=R+Rcosθ
var r = navWrap.width()/2;
var startAngle =0, endAngle=360; //可以通过改变角度,做出各种各样的径向菜单

//子菜单的夹角
var total = nav.length;
var gap = (endAngle - startAngle)/total;

//角度->弧度
var radian = Math.PI/180;

/*
* 计算并确定各个子菜单的最终位置
*/
$.each(nav,function(index, el) {
// 当前子菜单与x轴正向的夹角 θ (角度->弧度)
var myAngle = (startAngle + gap*index) * radian; // θ
var x = r+r*Math.cos(myAngle),//myAngle为弧度
y = r+r*Math.sin(myAngle);
// 设置当前子菜单的位置 (left,top) = (x,y)
$(this).css({
left: x + 'px',
top: y + 'px'
});
});
isLocated = true;
}
navWrap.toggleClass('active');
});
})
</script>
</body>
</html>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript Event事件学习第一章 Event介绍
Feb 07 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
网页挂马方式整理及详细介绍
Nov 03 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
JSON与js对象序列化实例详解
Mar 16 Javascript
webpack之devtool详解
Feb 10 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
vue点击自增和求和的实例代码
Nov 06 Javascript
js判断在哪个浏览器打开项目的方法
Jan 21 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 #Javascript
用svg制作富有动态的tooltip
Jul 17 #Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 #Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 #Javascript
JS判断页面是否出现滚动条的方法
Jul 17 #Javascript
javascript图片预加载实例分析
Jul 16 #Javascript
javascript的BOM汇总
Jul 16 #Javascript
You might like
php的access操作类
2008/04/09 PHP
PHP 类型转换函数intval
2009/06/20 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python中turtle库的使用实例
2019/09/09 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
社区居务公开实施方案
2014/03/27 职场文书
医院党员公开承诺书
2014/08/30 职场文书
工作自我评价范文
2015/03/05 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA