Maison > interface Web > tutoriel CSS > Comment créer des secteurs de cercle CSS parfaits

Comment créer des secteurs de cercle CSS parfaits

Barbara Streisand
Libérer: 2025-01-11 14:04:46
original
695 Les gens l'ont consulté

Récemment, j'ai construit une roulette à jackpot CSS, un projet qui présentait un défi unique : mettre en évidence dynamiquement les secteurs comme une aiguille les pointait. La roulette avait besoin de réactivité et de nombres de secteurs variables, excluant les solutions simples en image ou SVG. Les calculs géométriques étaient indispensables.

Mon approche consistait à faire pivoter les travées autour du centre d'un cercle et à les couper le long du rayon. La configuration initiale, détaillée ci-dessous (et disponible dans son intégralité via le lien plus bas), impliquait un style de base et une rotation incrémentielle des travées (360/secteurs, degrés de longueur). Ce n'était pas visuellement sophistiqué à ce stade.

Pour mettre en évidence un secteur, j'avais besoin de la distance entre deux points sur un cercle, étant donné le rayon et l'angle. La formule est :

<code>2 * radius * Math.sin(θ / 2)</code>
Copier après la connexion

où θ est l'angle en radians. Converti pour utilisation :

<code>2 * radius * Math.sin(Math.PI / sectors.length)</code>
Copier après la connexion

Ensuite, je me suis attaqué au découpage de secteurs pour éviter les chevauchements. Ma première tentative a utilisé un chemin de clip diagonal :

<code>clip-path: polygon(100% 0, 0 50%, 100% 100%);</code>
Copier après la connexion

Cela a fonctionné de manière adéquate avec de nombreux secteurs, mais des défauts sont devenus apparents avec moins de secteurs, en particulier avec seulement trois, comme indiqué :

How to create perfect CSS circle sectors

La solution consistait à calculer le point d'intersection entre la travée et le cercle, en coupant de ce point vers le centre. Cela a corrigé l'écrêtage :

How to create perfect CSS circle sectors

La recherche a donné des formules pour les segments créés sur un rayon horizontal par la ligne reliant les points d'intersection :

Segment central :

<code>radius * (1 - Math.cos(θ / 2))</code>
Copier après la connexion

Segment extérieur :

<code>radius * Math.cos(θ / 2)</code>
Copier après la connexion

(θ en radians)

Le rapport entre ces segments détermine le point de détourage, conduisant à :

<code>const clipPosition = Math.cos(Math.PI / sectors.length) * 100</code>
Copier après la connexion

Le corrigé clip-path :

<code>{
  'clip-path': `polygon(100% 0, ${clipPosition}% 0, 0 50%, ${
    clipPosition
  }% 100%, 100% 100%)`
}</code>
Copier après la connexion

Le résultat final, basé sur Vue, permet des tours aléatoires via des clics centraux et des tours ciblés via des clics sectoriels. (Lien vers le code complet omis, selon le texte original). Ce projet a fourni une leçon précieuse de trigonométrie pratique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal