cari
Rumahhujung hadapan webtutorial jsCara Menggunakan Elemen HTMLlt;dialog>

Dalam pembangunan bahagian hadapan, membina atau menggunakan komponen UI pra-bina ialah tugas biasa. Walau bagaimanapun, komponen ini sering datang dengan batasan. Mereka biasanya terikat pada rangka kerja tertentu dan memerlukan logik yang kompleks dan tidak standard. Untuk masa yang lama, komponen UI asas seperti tetingkap dialog bergantung pada pelaksanaan tersuai atau, dalam kes yang lebih mudah, kaedah JavaScript terbina dalam seperti alert(), prompt() dan confirm().

Berita baiknya ialah anda kini boleh melaksanakan komponen ini menggunakan

Elemen HTML, yang merupakan sebahagian daripada standard HTML5 dan disokong sepenuhnya oleh semua penyemak imbas moden.

Teg HTML, yang diperkenalkan pada Mei 2013 sebagai sebahagian daripada draf kerja W3C, telah dilancarkan bersama elemen interaktif seperti dan untuk menangani cabaran UI biasa. Dikeluarkan pada 2014, pada mulanya hanya disokong dalam Google Chrome dan Opera. Sokongan penuh untuk dalam Firefox dan Safari hanya datang pada Mac 2022, menangguhkan penggunaannya dalam projek pengeluaran. Walau bagaimanapun, dengan lebih dua tahun sokongan daripada pelayar utama, elemen kini cukup stabil untuk menggantikan
tersuai

Mari kita terokai ciri

dengan lebih terperinci.

Aspek teras penggunaan

HTML

tag mencipta kotak dialog tersembunyi secara lalai yang boleh berfungsi sama ada sebagai popup atau tetingkap modal.

Tetingkap timbul kerap digunakan untuk memaparkan pemberitahuan ringkas, seperti mesej kuki, makluman roti bakar yang hilang, petua alat atau elemen menu konteks klik kanan.

Tetingkap modal membantu pengguna menumpukan pada tugas tertentu, seperti pemberitahuan dan amaran yang memerlukan pengesahan pengguna, borang interaktif yang kompleks dan peti cahaya untuk imej atau video.

Tetingkap timbul tidak menghalang interaksi dengan halaman, manakala tetingkap modal menindih dokumen, meredupkan latar belakang dan menyekat tindakan lain. Tingkah laku ini berfungsi tanpa gaya atau skrip tambahan; satu-satunya perbezaan ialah kaedah yang digunakan untuk membuka dialog.

Kaedah pembukaan tetingkap dialog

— pop timbul:

<dialog>





<pre class="brush:php;toolbar:false">const popUpElement = document.getElementById("pop-up");

popUpElement.show();

— tetingkap modal:

<dialog>





<pre class="brush:php;toolbar:false">const modalElement = document.getElementById("modal");

modalElement.showModal();

Dalam kedua-dua kes, membuka

tag menetapkan atribut terbukanya kepada benar. Menetapkannya secara langsung akan membuka dialog sebagai pop timbul, bukan modal. Untuk membuat tetingkap modal, anda mesti menggunakan kaedah yang sesuai. Tiada JavaScript diperlukan untuk mencipta pop timbul yang mula dibuka.

<dialog open>Hi, I'm a popup!</dialog>

Cubalah:

  • Membuka pop timbul menggunakan kaedah .show(): https://codepen.io/alexgriss/pen/zYeMKJE
  • Membuka tetingkap modal menggunakan kaedah .showModal(): https://codepen.io/alexgriss/pen/jOdQMeq
  • Mengubah atribut terbuka secara langsung: https://codepen.io/alexgriss/pen/wvNQzRB

Pendekatan penutupan tetingkap dialog

Tetingkap dialog ditutup dengan cara yang sama, tidak kira bagaimana ia dibuka. Berikut ialah beberapa cara untuk menutup tetingkap pop timbul atau modal:

— dengan kaedah .close():

<dialog>





<pre class="brush:php;toolbar:false">const popUpElement = document.getElementById("pop-up");

popUpElement.show();

— dengan mencetuskan acara serah dalam borang dengan atribut method="dialog":

<dialog>





<pre class="brush:php;toolbar:false">const modalElement = document.getElementById("modal");

modalElement.showModal();

— dengan menekan kekunci Esc:

Penutupan dengan Esc berfungsi untuk tetingkap modal sahaja. Ia mula-mula mencetuskan acara pembatalan, kemudian ditutup, menjadikannya mudah untuk memberi amaran kepada pengguna tentang perubahan yang tidak disimpan dalam borang.

Cubalah:

  • Menutup kotak dialog dengan kaedah tutup: https://codepen.io/alexgriss/pen/GRzwjaV
  • Menutup kotak dialog melalui borang serahan: https://codepen.io/alexgriss/pen/jOdQVNV
  • Menutup tetingkap modal dengan kekunci Esc: https://codepen.io/alexgriss/pen/KKJrNKW
  • Menghalang tetingkap modal daripada ditutup dengan Esc: https://codepen.io/alexgriss/pen/mdvQObN

Nilai pulangan apabila ditutup

Apabila menutup dialog dengan borang menggunakan atribut method="dialog", anda boleh menangkap nilai butang serah. Ini berguna jika anda ingin mencetuskan tindakan yang berbeza berdasarkan butang yang diklik. Nilai disimpan dalam sifat returnValue.

Cubalah: https://codepen.io/alexgriss/pen/ZEwmBKx

Melihat lebih dekat bagaimana ia berfungsi

Mari kita mendalami mekanik tetingkap dialog dan butiran pelaksanaan penyemak imbasnya.

Mekanik pop timbul

Membuka

sebagai pop timbul dengan .show() atau atribut terbuka meletakkannya secara automatik dengan position: absolute dalam DOM. Gaya CSS asas, seperti jidar dan sempadan, digunakan pada elemen dan item boleh fokus pertama di dalam tetingkap akan mendapat fokus secara automatik melalui atribut autofokus. Selebihnya halaman kekal interaktif.

Mekanik tetingkap modal

Tetingkap modal direka bentuk dan berfungsi dengan cara yang lebih kompleks daripada pop timbul.

Tindanan dokumen

Apabila membuka tetingkap modal dengan .showModal(),

elemen dipaparkan dalam lapisan HTML khas yang meliputi keseluruhan kawasan halaman yang boleh dilihat. Lapisan ini dipanggil lapisan atas dan dikawal oleh pelayar. Dalam sesetengah penyemak imbas seperti Google Chrome, setiap modal dipaparkan dalam nod DOM yang berasingan dalam lapisan ini, boleh dilihat dalam pemeriksa elemen.

How to Use the HTMLlt;dialog> Elemen

Konsep lapisan merujuk kepada konteks tindanan, yang mentakrifkan cara elemen diletakkan di sepanjang paksi Z berbanding pengguna. Menetapkan nilai indeks-z dalam CSS mewujudkan konteks tindanan untuk elemen, di mana kedudukan anak-anaknya dikira dalam konteks tersebut. Tetingkap modal sentiasa berada di bahagian atas hierarki ini, jadi indeks-z tidak diperlukan.

Ketahui lebih lanjut tentang konteks tindanan di MDN.

Untuk mengetahui lebih lanjut tentang elemen yang dipaparkan dalam lapisan atas, lawati MDN.

Menyekat dokumen

Apabila elemen modal dipaparkan di lapisan atas, elemen pseudo :: latar belakang dibuat dengan saiz yang sama dengan kawasan dokumen yang boleh dilihat. Tirai latar ini menghalang interaksi dengan seluruh halaman, walaupun acara penunjuk: tiada peraturan CSS ditetapkan.

Atribut lengai ditetapkan secara automatik untuk semua elemen kecuali tetingkap modal, menyekat tindakan pengguna. Ia melumpuhkan acara klik dan fokus serta menjadikan elemen tidak boleh diakses oleh pembaca skrin dan teknologi bantuan lain.

Ketahui lebih lanjut tentang atribut lengai pada MDN.

Tingkah laku fokus

Apabila modal dibuka, elemen boleh fokus pertama di dalamnya secara automatik mendapat fokus. Untuk menukar elemen fokus awal, anda boleh menggunakan atribut autofokus atau indeks tab. Menetapkan indeks tab untuk elemen dialog itu sendiri tidak boleh dilakukan, kerana ia merupakan satu-satunya elemen pada halaman yang tidak digunakan logik lengai.

Selepas dialog ditutup, fokus kembali kepada elemen yang membukanya.

Menyelesaikan masalah UX dengan tetingkap modal

Malangnya, pelaksanaan asli

elemen tidak merangkumi semua aspek berinteraksi dengan tetingkap modal. Seterusnya, saya ingin membincangkan isu UX utama yang mungkin timbul apabila menggunakan tetingkap modal dan cara menyelesaikannya.

Menyekat tatal

Walaupun tetingkap modal HTML5 asli mencipta elemen pseudo :: latar belakang yang menyekat interaksi dengan kandungan di bawahnya, tatal halaman masih aktif. Ini boleh mengganggu pengguna, jadi disyorkan untuk memotong kandungan badan apabila modal dibuka:

<dialog>





<pre class="brush:php;toolbar:false">const popUpElement = document.getElementById("pop-up");

popUpElement.show();

Peraturan CSS sedemikian perlu ditambah dan dialih keluar secara dinamik setiap kali tetingkap modal dibuka dan ditutup. Ini boleh dicapai dengan memanipulasi kelas yang mengandungi peraturan CSS ini:

<dialog>





<pre class="brush:php;toolbar:false">const modalElement = document.getElementById("modal");

modalElement.showModal();

Anda juga boleh menggunakan pemilih :has jika status sokongannya memenuhi keperluan projek.

<dialog open>Hi, I'm a popup!</dialog>

Cubalah: https://codepen.io/alexgriss/pen/XWOyVKj

Menutup dialog dengan mengklik di luar tetingkap

Ini ialah senario UX standard untuk tetingkap modal dan ia boleh dilaksanakan dalam beberapa cara. Berikut adalah dua cara untuk menyelesaikan masalah ini:

Kaedah berdasarkan kelakuan elemen pseudo :: latar belakang

Mengklik pada elemen pseudo :: latar belakang dianggap sebagai klik pada elemen dialog itu sendiri. Oleh itu, jika anda membalut keseluruhan kandungan tetingkap modal dalam

dan kemudian menutup elemen dialog itu sendiri, anda boleh menentukan ke mana klik itu diarahkan — pada tirai latar atau pada kandungan tetingkap modal.

Jangan lupa untuk menetapkan semula pelapik lalai penyemak imbas dan gaya sempadan untuk

elemen untuk menghalang tetingkap modal daripada ditutup pada klik tidak sengaja:

<dialog>





<pre class="brush:php;toolbar:false">const popUpElement = document.getElementById("pop-up");

popUpElement.show();

Sekarang, kami menggunakan gaya biasa untuk sempadan dan jidar tetingkap modal hanya pada pembalut dalam.

Kita perlu menulis fungsi yang akan menutup tetingkap modal hanya apabila mengklik pada tirai latar, bukan pada elemen pembalut dalam:

<dialog>





<pre class="brush:php;toolbar:false">const modalElement = document.getElementById("modal");

modalElement.showModal();

Cubalah: https://codepen.io/alexgriss/pen/mdvQXpJ

Kaedah berdasarkan penentuan saiz tetingkap dialog

Kaedah ini berbeza daripada yang pertama, yang memerlukan pembungkus tambahan untuk kandungan modal. Di sini, anda tidak memerlukan sebarang pembalut tambahan. Apa yang diperlukan ialah menyemak sama ada kedudukan kursor berada di luar kawasan elemen apabila diklik:

<dialog open>Hi, I'm a popup!</dialog>

Cubalah: https://codepen.io/alexgriss/pen/NWoePVP

Menggayakan tetingkap dialog

elemen adalah lebih fleksibel dari segi penggayaan daripada banyak elemen HTML asli. Berikut ialah beberapa contoh untuk menggayakan tetingkap dialog:

Menggayakan tirai latar menggunakan :: pemilih tirai latar: https://codepen.io/alexgriss/pen/ExrOQEO

Membuka dan menutup tetingkap dialog animasi: https://codepen.io/alexgriss/pen/QWYJQJO

Tetingkap modal sebagai bar sisi: https://codepen.io/alexgriss/pen/GRzwxgr

Kebolehcapaian

Untuk masa yang lama,

elemen mempunyai beberapa masalah kebolehaksesan, tetapi kini ia berfungsi dengan baik dengan teknologi bantuan utama seperti pembaca skrin (VoiceOver, TalkBack, NVDA).

Apabila

dibuka, fokus dialihkan ke dialog oleh pembaca skrin. Untuk tetingkap modal, fokus kekal dalam dialog sehingga ia ditutup.

Secara lalai,

elemen diiktiraf oleh teknologi bantuan sebagai mempunyai atribut ARIA role="dialog". Dialog modal akan diiktiraf sebagai mempunyai atribut ARIA aria-modal="true".

Berikut ialah beberapa cara untuk meningkatkan kebolehcapaian

elemen:

aria-labelledby

Sentiasa sertakan tajuk di dalam tetingkap dialog dan nyatakan atribut aria-labelledby untuk

elemen, dengan nilai ditetapkan kepada id tajuk.

<dialog>





<pre class="brush:php;toolbar:false">const popUpElement = document.getElementById("pop-up");

popUpElement.show();

Jika anda perlu menggayakan elemen pseudo ::backdrop, pastikan anda turut menggunakan gaya tersebut pada elemen .backdrop yang sepadan untuk memastikan keserasian dengan penyemak imbas lama:

<dialog>





<pre class="brush:php;toolbar:false">const modalElement = document.getElementById("modal");

modalElement.showModal();

Adalah disyorkan untuk menyambungkan polyfill melalui import dinamik dan hanya untuk penyemak imbas yang tidak menyokong

elemen:

<dialog open>Hi, I'm a popup!</dialog>

Kesimpulan

HTML5

elemen ialah alat yang agak mudah namun berkuasa untuk melaksanakan tetingkap dan tetingkap timbul. Ia disokong dengan baik oleh penyemak imbas moden dan boleh digunakan dengan jayanya dalam projek berdasarkan kedua-dua vanila JS dan sebarang rangka kerja bahagian hadapan.

Dalam artikel ini, kami membincangkan topik berikut:

  • Masalah elemen menyelesaikan;
  • Interaksi dengan API elemen;
  • Cara tetingkap dialog berfungsi pada peringkat penyemak imbas;
  • Isu biasa dengan modal dan penyelesaiannya;
  • Meningkatkan kebolehcapaian elemen untuk teknologi bantuan seperti pembaca skrin;
  • Meluaskan sokongan penyemak imbas untuk elemen.

Akhir sekali, saya menjemput anda untuk menyemak pelaksanaan komponen tetingkap modal dalam JS tulen, yang mengambil kira aspek utama yang dibincangkan dalam artikel: https://codepen.io/alexgriss/pen/abXPOPP

Itu sahaja yang saya ingin kongsikan tentang bekerja dengan

elemen HTML. Saya harap artikel ini memberi inspirasi kepada anda untuk mencuba!

Atas ialah kandungan terperinci Cara Menggunakan Elemen HTMLlt;dialog>. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Dari laman web ke aplikasi: Aplikasi pelbagai JavaScriptDari laman web ke aplikasi: Aplikasi pelbagai JavaScriptApr 22, 2025 am 12:02 AM

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python vs JavaScript: Gunakan Kes dan Aplikasi MembandingkanPython vs JavaScript: Gunakan Kes dan Aplikasi MembandingkanApr 21, 2025 am 12:01 AM

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

Peranan C/C dalam JavaScript Jurubah dan PenyusunPeranan C/C dalam JavaScript Jurubah dan PenyusunApr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

JavaScript in Action: Contoh dan projek dunia nyataJavaScript in Action: Contoh dan projek dunia nyataApr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

JavaScript dan Web: Fungsi teras dan kes penggunaanJavaScript dan Web: Fungsi teras dan kes penggunaanApr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami Enjin JavaScript: Butiran PelaksanaanMemahami Enjin JavaScript: Butiran PelaksanaanApr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanPython vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanApr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python vs JavaScript: Komuniti, Perpustakaan, dan SumberPython vs JavaScript: Komuniti, Perpustakaan, dan SumberApr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

See all articles

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual