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 相关文章推荐
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
jQuery基于图层模仿五星星评价功能的方法
May 07 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
Bootstrap基本组件学习笔记之分页(12)
Dec 08 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
小程序实现搜索框功能
Mar 26 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php cout&amp;lt;&amp;lt;的一点看法
2010/01/24 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
php常见的魔术方法详解
2014/12/25 PHP
深入理解PHP内核(一)
2015/11/10 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python访问sqlserver示例
2014/02/10 Python
python中的五种异常处理机制介绍
2014/09/02 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
如何清空python的变量
2020/07/05 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
公司行政助理岗位职责
2015/04/11 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
详解Python中的进程和线程
2021/06/23 Python
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript