首页 >web前端 >css教程 >如何创建完美的 CSS 圆形扇区

如何创建完美的 CSS 圆形扇区

Barbara Streisand
Barbara Streisand原创
2025-01-11 14:04:46641浏览

最近,我构建了一个 CSS 大奖轮盘赌,该项目提出了一个独特的挑战:当指针指向扇区时动态突出显示扇区。 轮盘赌需要响应能力和可变扇区计数,排除了简单的图像或 SVG 解决方案。 几何计算是必不可少的。

我的方法涉及围绕圆心旋转跨度并沿半径剪裁它们。 下面详细介绍了初始设置(可通过下面的链接查看完整内容),涉及基本样式和跨度增量旋转(360/sectors.length 度)。 这个阶段的视觉效果并不复杂。

为了突出显示一个扇区,我需要给定半径和角度的圆上两点之间的距离。 公式为:

<code>2 * radius * Math.sin(θ / 2)</code>

其中 θ 是以弧度表示的角度。 转换使用:

<code>2 * radius * Math.sin(Math.PI / sectors.length)</code>

接下来,我解决了扇区剪切问题以防止重叠。我的第一次尝试使用了对角剪辑路径:

<code>clip-path: polygon(100% 0, 0 50%, 100% 100%);</code>

这对许多扇区都有效,但缺陷在扇区较少时变得明显,特别是只有三个扇区,如图所示:

How to create perfect CSS circle sectors

解决方案涉及计算跨度和圆之间的交点,从该点到中心进行裁剪。这纠正了剪辑:

How to create perfect CSS circle sectors

研究得出了由连接交点的线在水平射线上创建的线段的公式:

中心部分:

<code>radius * (1 - Math.cos(θ / 2))</code>

外段:

<code>radius * Math.cos(θ / 2)</code>

(θ,以弧度表示)

这些片段之间的比例决定了剪切点,导致:

<code>const clipPosition = Math.cos(Math.PI / sectors.length) * 100</code>

更正后的clip-path

<code>{
  'clip-path': `polygon(100% 0, ${clipPosition}% 0, 0 50%, ${
    clipPosition
  }% 100%, 100% 100%)`
}</code>

基于 Vue 的最终结果允许通过中心点击进行随机旋转,并通过扇区点击进行定向旋转。 (省略了完整代码的链接,按照原文)。 这个项目提供了实用三角学的宝贵课程。

以上是如何创建完美的 CSS 圆形扇区的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn