制作环形菜单的关键是利用三角函数计算菜单项在圆周上的位置。1. 通过HTML构建菜单结构,CSS设置容器和菜单项的样式,将菜单项初始定位在中心;2. 使用JavaScript中Math.cos和Math.sin根据均分角度(转换为弧度)计算每个菜单项的X、Y坐标,并应用transform平移至对应位置;3. 添加交互逻辑,通过点击或悬停切换展开与收起状态,结合CSS transition实现动画效果,核心在于弧度转换与坐标准确定位。

制作环形菜单的关键在于用三角函数将菜单项均匀分布在圆周上。HTML5结合CSS和JavaScript可以实现这个效果,核心是利用sin和cos计算每个菜单项的位置。
1. 基本结构:HTML与CSS布局
先创建一个容器和若干菜单项:
CSS设置容器为圆形,菜单项初始隐藏在中心:
.circle-menu {
position: relative;
width: 200px;
height: 200px;
margin: 200px auto;
}
.menu-item {
position: absolute;
width: 40px;
height: 40px;
border-radius: 50%;
text-align: center;
line-height: 40px;
color: white;
font-weight: bold;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
transition: all 0.5s ease;
}
2. 三角函数计算位置
JavaScript中使用Math.cos和Math.sin确定每个点的坐标:
立即学习“前端免费学习笔记(深入)”;
- 角度均分:总360度除以项目数量
- 转换为弧度:JavaScript三角函数使用弧度
- 计算X = r × cos(θ),Y = r × sin(θ)
示例代码:
const items = document.querySelectorAll('.menu-item');
const radius = 80; // 半径
items.forEach((item, index) => {
const angle = (index / items.length) * 2 * Math.PI; // 弧度
const x = radius * Math.cos(angle);
const y = radius * Math.sin(angle);
item.style.transform = `translate(${x}px, ${y}px)`;
});
3. 添加交互效果
让菜单可展开/收起:
- 默认状态菜单项聚集在中心
- 点击按钮或悬停时,应用计算后的坐标
- 用CSS transition实现动画
添加控制开关:
let isExpanded = false;
document.querySelector('.circle-menu').addEventListener('click', () => {
isExpanded = !isExpanded;
items.forEach((item, index) => {
if (isExpanded) {
const angle = (index / items.length) * 2 * Math.PI;
const x = radius * Math.cos(angle);
const y = radius * Math.sin(angle);
item.style.transform = `translate(${x}px, ${y}px)`;
} else {
item.style.transform = 'translate(-50%, -50%)';
}
});
});
基本上就这些。关键是理解角度如何转为坐标,再结合CSS定位。不复杂但容易忽略弧度转换这一步。实际项目中还可以加延迟动画、鼠标跟随等增强体验。











