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 相关文章推荐
js原生appendChild的bug解决心得分享
Jul 01 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
Mar 09 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
vue实现Excel文件的上传与下载功能的两种方式
Jun 28 Javascript
js时间转换毫秒的实例代码
Aug 21 Javascript
vue中实现高德定位功能
Dec 03 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
php bootstrap实现简单登录
2016/03/08 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
js数组操作学习总结
2013/11/04 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
python在指定目录下查找gif文件的方法
2015/05/04 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python实现图片中文字分割效果
2019/07/22 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python实现的分层随机抽样案例
2020/02/25 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
银行自荐信范文
2013/10/07 职场文书
化工专业应届生求职信
2013/11/08 职场文书
爱牙日活动总结
2014/08/29 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
立案决定书范文
2015/06/24 职场文书
秋季运动会加油词
2015/07/18 职场文书
婚宴父亲致辞
2015/07/27 职场文书
Python何绘制带有背景色块的折线图
2022/04/23 Python