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

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

Barbara Streisand
发布: 2025-01-11 14:04:46
原创
646 人浏览过

最近,我构建了一个 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板