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 序列化对象实现代码
Dec 18 Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 Javascript
Javascript冒泡排序算法详解
Dec 03 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
js+css实现超简洁的二级下拉菜单效果代码
Sep 07 Javascript
JavaScript仿支付宝密码输入框
Dec 29 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
Angular封装搜索框组件操作示例
Apr 25 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 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
php 设计模式之 单例模式
2008/12/19 PHP
php实现网站插件机制的方法
2009/11/10 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP内核探索:变量概述
2014/01/30 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
Angular2 父子组件数据通信实例
2017/06/22 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python Sleep休眠函数使用简单实例
2015/02/02 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python assert关键字原理及实例解析
2019/12/13 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
评析教师个人的自我评价
2014/02/19 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
生日宴会策划方案
2014/06/03 职场文书
汽修专业自荐信
2014/07/07 职场文书
财务工作个人总结
2015/02/27 职场文书