Rumah hujung hadapan web tutorial css Bagaimana untuk mencipta sektor bulatan CSS yang sempurna

Bagaimana untuk mencipta sektor bulatan CSS yang sempurna

Jan 11, 2025 pm 02:04 PM

Baru-baru ini, saya membina rolet jackpot CSS, sebuah projek yang memberikan cabaran yang unik: menyerlahkan sektor secara dinamik seperti yang ditunjuk oleh jarum kepadanya. Rolet memerlukan responsif dan kiraan sektor berubah-ubah, menolak imej mudah atau penyelesaian SVG. Pengiraan geometri adalah penting.

Pendekatan saya melibatkan pusingan rentang mengelilingi pusat bulatan dan memotongnya di sepanjang jejari. Persediaan awal, diperincikan di bawah (dan tersedia sepenuhnya melalui pautan lebih jauh ke bawah), melibatkan penggayaan asas dan putaran tambahan rentang (360/sectors.length degrees). Ia tidak canggih secara visual pada peringkat ini.

Untuk menyerlahkan sektor, saya memerlukan jarak antara dua titik pada bulatan, diberi jejari dan sudut. Formulanya ialah:

<code>2 * radius * Math.sin(θ / 2)</code>
Salin selepas log masuk

di mana θ ialah sudut dalam radian. Ditukar untuk kegunaan:

<code>2 * radius * Math.sin(Math.PI / sectors.length)</code>
Salin selepas log masuk

Seterusnya, saya menangani keratan sektor untuk mengelakkan pertindihan. Percubaan pertama saya menggunakan laluan klip pepenjuru:

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

Ini berfungsi dengan baik dengan banyak sektor, tetapi kelemahan menjadi ketara dengan sektor yang lebih sedikit, terutamanya dengan hanya tiga, seperti yang ditunjukkan:

How to create perfect CSS circle sectors

Penyelesaian melibatkan pengiraan titik persilangan antara rentang dan bulatan, memotong dari titik itu ke pusat. Ini membetulkan keratan:

How to create perfect CSS circle sectors

Penyelidikan menghasilkan formula untuk segmen yang dicipta pada sinar mendatar oleh garis yang menghubungkan titik persilangan:

Segmen tengah:

<code>radius * (1 - Math.cos(θ / 2))</code>
Salin selepas log masuk

Segmen luar:

<code>radius * Math.cos(θ / 2)</code>
Salin selepas log masuk

(θ dalam radian)

Nisbah antara segmen ini menentukan titik keratan, yang membawa kepada:

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

Yang diperbetulkan clip-path:

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

Hasil akhir berasaskan Vue membenarkan putaran rawak melalui klik tengah dan putaran disasarkan melalui klik sektor. (Pautan ke kod lengkap ditinggalkan, seperti dalam teks asal). Projek ini memberikan pelajaran berharga dalam trigonometri praktikal.

Atas ialah kandungan terperinci Bagaimana untuk mencipta sektor bulatan CSS yang sempurna. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1268
29
Tutorial C#
1246
24
Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Apr 11, 2025 am 11:29 AM

Pernahkah anda memerlukan pemasa undur dalam projek? Untuk sesuatu seperti itu, mungkin semula jadi untuk mencapai plugin, tetapi sebenarnya lebih banyak lagi

Panduan Atribut Data HTML Panduan Atribut Data HTML Apr 11, 2025 am 11:50 AM

Semua yang anda ingin tahu mengenai atribut data dalam HTML, CSS, dan JavaScript.

Bukti konsep untuk menjadikan sass lebih cepat Bukti konsep untuk menjadikan sass lebih cepat Apr 16, 2025 am 10:38 AM

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

Walaupun anda tidak kelihatan, kecerunan CSS menjadi lebih baik Walaupun anda tidak kelihatan, kecerunan CSS menjadi lebih baik Apr 11, 2025 am 09:16 AM

Satu perkara yang menarik perhatian saya pada senarai ciri-ciri untuk Lea Verou &#039; s conic-gradient () polyfill adalah item terakhir:

Cara Membina Komponen Vue dalam Tema WordPress Cara Membina Komponen Vue dalam Tema WordPress Apr 11, 2025 am 11:03 AM

Arahan template inline membolehkan kita membina komponen Vue yang kaya sebagai peningkatan progresif ke atas markup WordPress yang sedia ada.

Perbandingan pembekal bentuk statik Perbandingan pembekal bentuk statik Apr 16, 2025 am 11:20 AM

Mari kita cuba menyusun istilah di sini: "Penyedia Borang Statik." Anda membawa html anda

PHP adalah A-OK untuk templat PHP adalah A-OK untuk templat Apr 11, 2025 am 11:04 AM

Templat PHP sering mendapat rap buruk untuk memudahkan kod subpar - tetapi itu tidak perlu berlaku. Mari kita lihat bagaimana projek PHP dapat menguatkuasakan asas

Tiga jenis kod Tiga jenis kod Apr 11, 2025 pm 12:02 PM

Setiap kali saya memulakan projek baru, saya menyusun kod yang saya cari dalam tiga jenis, atau kategori jika anda suka. Dan saya fikir jenis ini boleh digunakan

See all articles