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 相关文章推荐
分页栏的web标准实现
Nov 01 Javascript
javascript数组详解
Oct 22 Javascript
jQuery下拉框的简单应用
Jun 24 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
Dec 08 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
Vue.js用法详解
Nov 13 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
详解vue-cli 2.0配置文件(小结)
Jan 14 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
JavaScript修改注册表实例代码
Jan 05 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python动态进度条的实现代码
2019/07/03 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
电子商务专员岗位职责
2013/12/11 职场文书
初中数学教学反思
2014/01/16 职场文书
大学生新学期计划书
2014/04/28 职场文书
给校长的建议书600字
2014/05/15 职场文书
党性观念心得体会
2014/09/03 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
九九重阳节致辞
2015/07/31 职场文书
班主任寄语2016
2015/12/04 职场文书