Idea teras ialah: Gunakan operasi menatal untuk memilih pilihan, bukannya pemilihan klik tradisional. Daripada membina kawalan tersuai dari awal, kami dengan bijak menggunakan butang kawalan -radio semantik.
struktur HTML adalah seperti berikut, menggunakan kumpulan tag butang radio bersarang:
<label for="madrid"> Madrid <abbr>MAD</abbr> </label> <label for="malta"> Malta <abbr>MLA</abbr> </label>
.scroll-container { /* 尺寸和布局 */ \--itemHeight: 60px; \--itemGap: 10px; \--containerHeight: calc((var(--itemHeight) * 7) + (var(--itemGap) * 6)); width: 400px; height: var(--containerHeight); align-items: center; row-gap: var(--itemGap); border-radius: 4px; /* 样式 */ \--topBit: calc((var(--containerHeight) - var(--itemHeight))/2); \--footBit: calc((var(--containerHeight) + var(--itemHeight))/2); background: linear-gradient( rgb(254 251 240), rgb(254 251 240) var(--topBit), rgb(229 50 34 / .5) var(--topBit), rgb(229 50 34 / .5) var(--footBit), rgb(254 251 240) var(--footBit)); box-shadow: 0 0 10px #eee; }
--itemHeight
--itemGap
--containerHeight
Latar belakang menggunakan warna kecerunan untuk menyerlahkan kawasan tengah (kedudukan diperiksa). --topBit
--footBit
Dayakan CSS Scroll Capture:
.scroll-container { display: flex; flex-direction: column; /* 其他样式 */ }
.scroll-container { overflow-y: scroll; scroll-snap-type: y mandatory; overscroll-behavior-y: none; /* 其他样式 */ }
Mencegah limpahan menatal. scroll-snap-type: y mandatory;
overscroll-behavior-y: none;
Gaya pilihan:
.scroll-item { /* 尺寸和布局 */ width: 90%; box-sizing: border-box; padding-inline: 20px; border-radius: inherit; /* 样式和字体 */ background: linear-gradient(to right, rgb(242 194 66), rgb(235 122 51)); box-shadow: 0 0 4px rgb(235 122 51); font: 16pt/var(--itemHeight) system-ui; color: #fff; input { appearance: none; } abbr { float: right; } /* 机场代码 */ /* 选中状态样式 */ &:has(:checked) { background: rgb(229 50 34); } }
Pemilihan klik blok, pilih hanya dengan menatal. scroll-snap-align: center;
pointer-events: none;
kod javascript digunakan untuk mendengar acara tatal, menetapkan pilihan tatal ke pusat untuk memilih:
API
let observer = new IntersectionObserver(entries => { entries.forEach(entry => { with(entry) if(isIntersecting) target.children[1].checked = true; }); }, { root: document.querySelector(`.scroll-container`), rootMargin: `-51% 0px -49% 0px` }); document.querySelectorAll(`.scroll-item`).forEach(item => observer.observe(item));
IntersectionObserver
Gunakan langkah -langkah di atas untuk membuat kawalan borang yang memilih pilihan dengan menatal. Sekiranya anda perlu memilih pilihan apabila halaman dimuatkan, anda boleh mendapatkan lokasinya melalui JavaScript dan tatal ke atasnya menggunakan kaedah
scrollTo()
Beberapa kegunaan berfungsi untuk pemerhati persimpangan untuk mengetahui bila elemen dilihat (preethi sam)
flex
CSS Scroll Snap Properties (MDN) scrollTo()
Atas ialah kandungan terperinci Cara Membuat Kawalan Borang 'Tatal untuk Memilih'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!