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 相关文章推荐
Dojo之路:如何利用Dojo实现Drag and Drop效果
Apr 10 Javascript
JavaScript this 深入理解
Jul 30 Javascript
使用js操作css实现js改变背景图片示例
Mar 10 Javascript
js中的内部属性与delete操作符介绍
Aug 10 Javascript
jquery日历插件e-calendar升级版
Nov 10 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
js实现数组去重方法及效率?Ρ? target=
Feb 14 Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
Vue实现数据请求拦截
Oct 23 Javascript
Vue scoped及deep使用方法解析
Aug 01 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中heredoc与nowdoc介绍
2014/12/25 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
Require.js的基本用法详解
2017/07/03 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
师范生自荐信模板
2014/05/28 职场文书
义和团口号
2014/06/17 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
捐资助学感谢信
2015/01/21 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
小学校长开学致辞
2015/07/29 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript