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 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
Bootstrap表单制作代码
Mar 17 Javascript
详解Vue2中组件间通信的解决全方案
Jul 28 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
JavaScript之数组扁平化详解
Jun 03 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将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
python求pi的方法
2014/10/08 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
人工神经网络算法知识点总结
2019/06/11 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
北京SQL新华信咨询
2016/09/30 面试题
思想政治自我鉴定
2013/10/06 职场文书
应用英语专业自荐信
2014/01/26 职场文书
《将心比心》教学反思
2014/04/08 职场文书
挂靠协议书范本
2014/04/22 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python