


Melaksanakan kesan pengaktifan pilihan tunggal navigasi sampingan: amalan JavaScript dan CSS
Infrastruktur navigasi sampingan
Apabila membina navigasi sampingan interaktif, kami biasanya menggunakan HTML untuk menentukan struktur menu, CSS untuk mencantikkan penampilannya dan menentukan keadaan pengaktifan, dan JavaScript untuk mengendalikan logik interaksi pengguna.
Struktur HTML
Kod HTML berikut menunjukkan struktur menu navigasi sampingan biasa dengan pelbagai elemen main_list_item, masing -masing mewakili item menu utama.
<meta charset="utf-8"> <meta name="viewport" content="width = peranti-lebar, skala awal = 1.0"> <meta http-equiv="x-ua-compisan" content="ie = edge"> <tirtle> Side Nav <nav id="nav_menu_query_off"> <menu id="main_menu"> <li class="main_list_item"> <div class="menu_header"> menu satu </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu dua </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu tiga </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu empat </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> </menu> </nav> </tirtle>
Gaya CSS
CSS digunakan untuk menentukan susun atur dan gaya visual navigasi. Antaranya, kelas aktif adalah kunci untuk mencapai kesan pengaktifan, dan ia menambah sempadan merah ke bahagian bawah item menu.
* { Margin: 0; Padding: 0; saiz kotak: kotak sempadan; Teks-penyerapan: Tiada; Senarai gaya: Tiada; } badan { Font-keluarga: 'Ebrima'; latar belakang warna: #444444; } nav#nav_menu_query_off { Kedudukan: Tetap; Atas: 0; Kiri: 0; Lebar: 200px; Ketinggian: 100VH; latar belakang warna: #222222; Limpahan: Auto; Z-indeks: 2; Padding: 20px 0 20px 20px; } NAV#NAV_MENU_QUERY_OFF MENU#MAIN_MENU LI.MAIN_LIST_ITEM DIV.MENU_HEADER { Teks-transformasi: huruf besar; Padding-Bottom: 10px; } NAV#NAV_MENU_QUERY_OFF MENU LI { Warna: #f0f0f0; } nav#nav_menu_query_off Menu#main_menu li.main_list_item: tidak (: anak pertama) { padding-top: 20px; } .aktif { Sempadan-Bottom: 1px Pepejal Merah; } Nav ::-WebKit-Scrollbar { Paparan: Tiada; }
Analisis logik JavaScript asal
Kod JavaScript asal direka untuk menambah pendengar acara klik untuk setiap item menu dan togol kelas aktifnya apabila diklik.
const cards = document.QuerySelectorAll ('. main_list_item'); cards.foreach ((kad) => { const num_btn = card.QuerySelector ('. Menu_Header') num_btn.addeventListener ('klik', () => { jika (! card.classlist.contains ('aktif')) { card.classlist.add ('aktif'); } else { card.classlist.remove ('aktif'); } }) })
Masalah dengan kod ini ialah apabila item menu diklik, ia hanya memutuskan sama ada untuk menambah atau mengeluarkan kelas berdasarkan sama ada ia kini mengandungi kelas aktif. Ia tidak menyemak atau mengubah status item menu lain. Ini bermakna jika pengguna mengklik pada item menu yang berbeza secara berterusan, setiap item menu yang diklik akan diberikan kelas aktif, menghasilkan pelbagai item menu yang menunjukkan sempadan merah pada masa yang sama, yang tidak konsisten dengan kesan "satu pilihan" yang kami harapkan.
Penyelesaian untuk melaksanakan pengaktifan pilihan tunggal
Untuk mencapai kesan bahawa hanya satu item menu yang diaktifkan pada satu masa, idea teras adalah untuk terlebih dahulu membersihkan status pengaktifan semua item menu lain sebelum mengaktifkan item menu semasa. Ini boleh dilakukan dengan melintasi semua item menu dan mengeluarkan kelas aktif mereka sebelum menambahkannya.
Berikut adalah kod JavaScript yang diubahsuai:
const cards = document.QuerySelectorAll ('. main_list_item'); cards.foreach ((kad) => { const num_btn = card.QuerySelector ('. Menu_Header') num_btn.addeventListener ('klik', () => { jika (! card.classlist.contains ('aktif')) { // Sebelum menambah kelas aktif item semasa, jelaskan kelas aktif semua item kad pertama.foreach ((item) => item.classlist.remove ('aktif')); card.classlist.add ('aktif'); } else { // Sekiranya item semasa diaktifkan dan diklik lagi, keluarkan kelas aktif (nyahaktifkan) card.classlist.remove ('aktif'); } }) })
Parsing Kod:
- const cards = document.QuerySelectorAll ('. main_list_item');: Barisan ini mendapat semua elemen DOM dengan kelas main_list_item, iaitu semua item menu utama.
- cards.foreach ((card) => {...});: Tambah pendengar acara klik untuk setiap item menu.
- num_btn.addeventListener ('klik', () => {...});: Fungsi panggil balik dicetuskan apabila menu_header (bahagian tajuk item menu) diklik.
- jika (! card.classlist.contains ('aktif')) {...}: Menentukan sama ada item menu yang diklik sekarang sudah aktif.
- Jika kelas aktif tidak termasuk (iaitu, ia tidak diaktifkan):
- cards.foreach ((item) => item.classlist.remove ('aktif'));: Ini adalah titik pengubahsuaian utama. Ia melintasi semua elemen utama_list_item sekali lagi dan memaksa kelas aktif untuk dikeluarkan. Ini memastikan bahawa semua keadaan pengaktifan lama dibersihkan sebelum item menu baru diaktifkan.
- card.classlist.add ('aktif');: Kemudian, tambahkan kelas aktif ke item menu yang diklik sekarang untuk memaparkan sempadan merah.
- lain {card.classlist.remove ('aktif'); }: Jika item semasa sudah mengandungi kelas aktif (iaitu, ia diaktifkan), keluarkan kelas aktif apabila diklik sekali lagi untuk mencapai kesan pengaktifan.
- Jika kelas aktif tidak termasuk (iaitu, ia tidak diaktifkan):
Contoh kod lengkap
Untuk pemahaman dan amalan yang mudah, inilah kod lengkap yang merangkumi HTML, CSS dan JavaScript yang disemak semula:
Html (index.html)
<meta charset="utf-8"> <meta name="viewport" content="width = peranti-lebar, skala awal = 1.0"> <meta http-equiv="x-ua-compisan" content="ie = edge"> <tirtle> Side Nav <link rel="stylesheet" href="style.css"> <nav id="nav_menu_query_off"> <menu id="main_menu"> <li class="main_list_item"> <div class="menu_header"> menu satu </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu dua </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu tiga </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> <li class="main_list_item"> <div class="menu_header"> menu empat </div> <div class="menu_body"> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> <menu class="sub_menu"> </menu> </div> </li> </menu> </nav> <script src="script.js"> </script> </tirtle>
CSS (style.css)
* { Margin: 0; Padding: 0; saiz kotak: kotak sempadan; Teks-penyerapan: Tiada; Senarai gaya: Tiada; } badan { Font-keluarga: 'Ebrima'; latar belakang warna: #444444; } nav#nav_menu_query_off { Kedudukan: Tetap; Atas: 0; Kiri: 0; Lebar: 200px; Ketinggian: 100VH; latar belakang warna: #222222; Limpahan: Auto; Z-indeks: 2; Padding: 20px 0 20px 20px; } NAV#NAV_MENU_QUERY_OFF MENU#MAIN_MENU LI.MAIN_LIST_ITEM DIV.MENU_HEADER { Teks-transformasi: huruf besar; Padding-Bottom: 10px; kursor: penunjuk; / * Tambah penunjuk kursor untuk mengklik */ } NAV#NAV_MENU_QUERY_OFF MENU LI { Warna: #f0f0f0; } nav#nav_menu_query_off Menu#main_menu li.main_list_item: tidak (: anak pertama) { padding-top: 20px; } .aktif { Sempadan-Bottom: 1px Pepejal Merah; } Nav ::-WebKit-Scrollbar { Paparan: Tiada; }
JavaScript (script.js)
const cards = document.QuerySelectorAll ('. main_list_item'); cards.foreach ((kad) => { const num_btn = card.QuerySelector ('. Menu_Header') num_btn.addeventListener ('klik', () => { jika (! card.classlist.contains ('aktif')) { // Sebelum menambah kelas aktif item semasa, jelaskan kelas aktif semua item kad pertama.foreach ((item) => item.classlist.remove ('aktif')); card.classlist.add ('aktif'); } else { // Sekiranya item semasa diaktifkan dan diklik lagi, keluarkan kelas aktif (nyahaktifkan) card.classlist.remove ('aktif'); } }) })
Perkara yang perlu diperhatikan dan pengoptimuman
- Pertimbangan Prestasi: Untuk navigasi kompleks dengan sejumlah besar item menu, meleleh melalui semua elemen dan mengeluarkan kelas dengan setiap klik boleh mengakibatkan sedikit overhead prestasi. Tetapi dalam senario navigasi sampingan yang paling biasa (sepuluh atau beratus -ratus item menu), overhead ini sering diabaikan.
- Delegasi Acara: Untuk jumlah item yang dihasilkan secara dinamik atau banyak, menggunakan delegasi acara dapat mengoptimumkan prestasi. Iaitu, hanya pendengar acara yang ditambah kepada elemen induk, dan gelembung peristiwa untuk menentukan elemen kanak -kanak yang diklik. Tetapi ini akan menjadikan logik JavaScript sedikit lebih rumit.
- Pengekalkan: Menguruskan keadaan pengaktifan elemen melalui kelas CSS adalah amalan yang disyorkan, yang memisahkan gaya dan tingkah laku, menjadikan kod lebih mudah difahami dan dikekalkan.
- Pengalaman Pengguna: Pastikan kawasan klik cukup besar dan memberikan maklum balas visual (seperti kursor: penunjuk) untuk meningkatkan pengalaman pengguna.
Meringkaskan
Tutorial ini memperkenalkan secara terperinci bagaimana untuk mencapai kesan pengaktifan satu pilihan menu navigasi sampingan dengan mengubah logik JavaScript. Inti adalah dengan menggunakan QuerySelectorall untuk mendapatkan semua item menu dan mengosongkan semua keadaan pengaktifan lama sebelum mengaktifkan item baru setiap kali anda mengklik. Corak ini digunakan secara meluas dalam pelbagai komponen UI, memastikan kejelasan antara muka dan jangkaan operasi pengguna. Melalui beberapa baris pengubahsuaian kod mudah, kami berjaya membetulkan tingkah laku pelbagai pilihan kepada tingkah laku pilihan tunggal yang mematuhi tabiat pengguna.
Atas ialah kandungan terperinci Melaksanakan kesan pengaktifan pilihan tunggal navigasi sampingan: amalan JavaScript dan CSS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk memulakan dengan HTML dengan cepat, anda hanya perlu menguasai beberapa tag asas untuk membina rangka web. 1. Struktur halaman adalah penting, dan, yang merupakan elemen akar, mengandungi maklumat meta, dan merupakan kawasan paparan kandungan. 2. Gunakan tajuk. Semakin tinggi tahap, semakin kecil nombor. Gunakan tag untuk segmen teks untuk mengelakkan melangkau tahap. 3. Pautan menggunakan tag dan sepadan dengan atribut HREF, dan imej menggunakan tag dan mengandungi atribut SRC dan ALT. 4. Senarai ini dibahagikan kepada senarai yang tidak teratur dan senarai yang diperintahkan. Setiap entri diwakili dan mesti bersarang dalam senarai. 5. Pemula tidak perlu memaksa menghafal semua tag. Lebih cekap untuk menulis dan memeriksa mereka semasa anda menulis. Menguasai struktur, teks, pautan, gambar dan senarai untuk membuat laman web asas.

Shadowdom adalah teknologi yang digunakan dalam teknologi komponen web untuk membuat subtrees DOM terpencil. 1. Ia membolehkan gunung struktur DOM bebas pada elemen HTML biasa, dengan gaya dan tingkah laku sendiri, dan tidak menjejaskan dokumen utama; 2. Dibuat melalui JavaScript, seperti menggunakan kaedah lampiran dan menetapkan mod untuk dibuka; 3. Apabila digunakan dalam kombinasi dengan HTML, ia mempunyai tiga ciri utama: struktur yang jelas, pengasingan gaya dan unjuran kandungan (slot); 4. Nota termasuk debugging kompleks, kawalan skop gaya, overhead prestasi dan masalah keserasian rangka kerja. Singkatnya, Shadowdom menyediakan keupayaan enkapsulasi asli untuk membina komponen UI yang boleh diguna semula dan tidak mencemarkan.

Thenameattributeinaninputtagisusedtoidentifytheinputwhentheformissubmitted;itservesasthekeyinthekey-valuepairsenttotheserver,wheretheuser'sinputisthevalue.1.Whenaformissubmitted,thenameattributebecomesthekeyandtheinputvaluebecomesthevalueinthedatasen

❌youcannotnesttagsinsideanothertagbecauseit'sinvalidhtml; browsersautomomatikclosethefirstbeforeopeningthenext, drectinginseparateParagraphs.instead, useinlineelements,

Menggunakan tag adalah kaedah yang paling mudah dan disyorkan. Sintaks ini sesuai untuk pelayar moden untuk membenamkan PDF secara langsung; 2. Menggunakan tag boleh memberikan sokongan kandungan kawalan dan sandaran yang lebih baik, sintaks adalah, dan menyediakan pautan muat turun dalam tag sebagai penyelesaian sandaran apabila mereka tidak disokong; 3. Ia boleh tertanam melalui Google Docsviewer, tetapi tidak disyorkan untuk digunakan secara meluas kerana isu privasi dan prestasi; 4. Untuk meningkatkan pengalaman pengguna, ketinggian yang sesuai harus ditetapkan, saiz responsif (seperti ketinggian: 80VH) dan pautan muat turun PDF harus disediakan supaya pengguna dapat memuat turun dan melihatnya sendiri.

Kaedah penempatan gaya perlu dipilih mengikut tempat kejadian. 1. Dalam talian sesuai untuk pengubahsuaian sementara unsur tunggal atau kawalan JS dinamik, seperti perubahan warna butang dengan operasi; 2. CSS dalaman sesuai untuk projek dengan beberapa halaman dan struktur mudah, yang mudah untuk pengurusan gaya berpusat, seperti tetapan gaya asas halaman log masuk; 3. Keutamaan diberikan untuk menggunakan semula, penyelenggaraan dan prestasi, dan lebih baik untuk memecah fail CSS pautan luaran untuk projek besar.

TheContentititableatTributeMakesanyhtmleLementedByDdingContentedied boleh

Untuk membuat senarai HTML yang tidak teratur, anda perlu menggunakan tag untuk menentukan bekas senarai. Setiap item senarai dibalut dengan tag, dan penyemak imbas secara automatik akan menambah peluru; 1. Buat senarai dengan tag; 2. Setiap item senarai ditakrifkan dengan tag; 3. Penyemak imbas secara automatik menjana simbol titik lalai; 4. Sublists boleh dilaksanakan melalui bersarang; 5. Gunakan atribut jenis gaya CSS untuk mengubah suai gaya simbol, seperti cakera, bulatan, persegi, atau tidak; Gunakan tag ini dengan betul untuk menghasilkan senarai yang tidak teratur standard.
