Heim > Web-Frontend > CSS-Tutorial > So erstellen Sie perfekte CSS-Kreissektoren

So erstellen Sie perfekte CSS-Kreissektoren

Barbara Streisand
Freigeben: 2025-01-11 14:04:46
Original
645 Leute haben es durchsucht

Kürzlich habe ich ein CSS-Jackpot-Roulette erstellt, ein Projekt, das eine einzigartige Herausforderung darstellte: Sektoren dynamisch hervorzuheben, während eine Nadel auf sie zeigt. Das Roulette erforderte Reaktionsfähigkeit und variable Sektorzahlen, sodass einfache Bild- oder SVG-Lösungen ausgeschlossen waren. Geometrische Berechnungen waren unerlässlich.

Mein Ansatz bestand darin, Spannen um den Mittelpunkt eines Kreises zu drehen und sie entlang des Radius zu beschneiden. Die anfängliche Einrichtung, die unten detailliert beschrieben wird (und vollständig über den Link weiter unten verfügbar ist), umfasste grundlegendes Styling und eine schrittweise Drehung der Spannen (360/Sektoren.Länge Grad). Zu diesem Zeitpunkt war es optisch noch nicht anspruchsvoll.

Um einen Sektor hervorzuheben, benötigte ich den Abstand zwischen zwei Punkten auf einem Kreis, gegebener Radius und Winkel. Die Formel lautet:

<code>2 * radius * Math.sin(θ / 2)</code>
Nach dem Login kopieren

wobei θ der Winkel im Bogenmaß ist. Zur Verwendung konvertiert:

<code>2 * radius * Math.sin(Math.PI / sectors.length)</code>
Nach dem Login kopieren

Als nächstes habe ich mich mit dem Sektor-Clipping beschäftigt, um Überlappungen zu verhindern. Mein erster Versuch verwendete einen diagonalen Clip-Pfad:

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

Dies funktionierte bei vielen Sektoren ausreichend, bei weniger Sektoren, insbesondere bei nur drei, traten jedoch Mängel auf, wie gezeigt:

How to create perfect CSS circle sectors

Die Lösung bestand darin, den Schnittpunkt zwischen der Spanne und dem Kreis zu berechnen und von diesem Punkt zum Mittelpunkt zu schneiden. Dadurch wurde der Ausschnitt korrigiert:

How to create perfect CSS circle sectors

Untersuchungen ergaben Formeln für die Segmente, die auf einem horizontalen Strahl durch die Linie erzeugt werden, die Schnittpunkte verbindet:

Mittelsegment:

<code>radius * (1 - Math.cos(θ / 2))</code>
Nach dem Login kopieren

Äußeres Segment:

<code>radius * Math.cos(θ / 2)</code>
Nach dem Login kopieren

(θ im Bogenmaß)

Das Verhältnis zwischen diesen Segmenten bestimmt den Clipping-Punkt und führt zu:

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

Das korrigierte clip-path:

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

Das endgültige, Vue-basierte Ergebnis ermöglicht zufällige Drehungen über Mittelklicks und gezielte Drehungen über Sektorklicks. (Link zum vollständigen Code weggelassen, gemäß Originaltext). Dieses Projekt lieferte eine wertvolle Lektion in praktischer Trigonometrie.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie perfekte CSS-Kreissektoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage