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下给元素添加事件的方法与代码
Aug 13 Javascript
javascript css styleFloat和cssFloat
Mar 15 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
求js数组的最大值和最小值的四种方法
Mar 03 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
JS+Canvas实现五子棋游戏
Aug 26 Javascript
JavaScript前端面试组合函数
Jun 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中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
如何设置Java的运行环境
2013/04/05 面试题
幼儿园老师辞职信
2014/01/20 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
一文搞懂Redis中String数据类型
2022/04/03 Redis