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

制作环形菜单的关键在于用三角函数将菜单项均匀分布在圆周上。html5结合CSS和JavaScript可以实现这个效果,核心是利用sin和cos计算每个菜单项的位置。
1. 基本结构:HTML与css布局
先创建一个容器和若干菜单项:
<div class="circle-menu"> <div class="menu-item" style="background:#f44336;">A</div> <div class="menu-item" style="background:#2196F3;">B</div> <div class="menu-item" style="background:#4CAF50;">C</div> <div class="menu-item" style="background:#FF9800;">D</div> </div>
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定位。不复杂但容易忽略弧度转换这一步。实际项目中还可以加延迟动画、鼠标跟随等增强体验。
暂无评论


