การสร้าง Native HTML5 Dialog Windows
เผยแพร่แล้ว: 2017-03-29หน้าต่างโต้ตอบเป็นหนึ่งในองค์ประกอบที่ใช้บ่อยที่สุดในการออกแบบส่วนต่อประสานผู้ใช้ของเว็บไซต์ มันถูกใช้เพื่อวัตถุประสงค์หลายประการ รวมถึงการแสดงการแจ้งเตือน การส่งแบบฟอร์มการสมัครรับข้อมูล การแจ้งเตือนข้อผิดพลาด/คำเตือน และการดึงความสนใจของผู้เข้าชมไปยังส่วนข้อมูลที่สำคัญ เมื่อหน้าต่างโต้ตอบได้รับการออกแบบอย่างมีประสิทธิภาพและใช้งานได้อย่างเหมาะสม จะทำให้งานของผู้ใช้ง่ายขึ้น
ก่อนหน้านี้ การสร้างหน้าต่างโต้ตอบจำเป็นต้องใช้ปลั๊กอิน jQuery เช่น Pop Easy, jQuery UI Dialog หรือ Twitter Bootstrap Modal แต่ตอนนี้ ด้วยการแนะนำองค์ประกอบ <dialog>
ใหม่ของ HTML5 ทำให้นักพัฒนาสามารถสร้างกล่องโต้ตอบและโมดอลป๊อปอัปบนหน้าเว็บได้ง่ายขึ้นมาก
เริ่มแรก แท็ก <dialog>
ป้อนข้อกำหนด HTML5 เพื่อเป็นโซลูชันที่ยอดเยี่ยมสำหรับการมาร์กอัปการสนทนา แต่ถูกละทิ้งจากข้อกำหนด HTML5 ย้อนกลับไปในปี 2009 อย่างไรก็ตาม แท็กได้กลับมาอยู่ในรูปแบบใหม่อีกครั้ง
ในโพสต์นี้ ฉันจะนำคุณผ่านองค์ประกอบ <dialog>
และแสดงให้เห็นว่าคุณจะใช้ประโยชน์สูงสุดจากมันได้อย่างไร เอาล่ะ!
หากคุณต้องการดูการทำงานขององค์ประกอบ <dialog>
หรือลองใช้โค้ด ดูการสาธิตสดที่นี่
รองรับเบราว์เซอร์สำหรับ <dialog>
Element
ขออภัย การสนับสนุนเบราว์เซอร์สำหรับ <dialog>
ถูกจำกัดในขณะนี้ ปัจจุบันองค์ประกอบได้รับการสนับสนุนใน Safari 6.0 และ Chrome Canary เท่านั้น แม้ว่า Chrome Canary จะสนับสนุนแท็กอย่างสมบูรณ์ แต่คุณต้องเปิดใช้การตั้งค่าสถานะเพื่อใช้งาน ไปที่ chrome://flags
และเปิดใช้งานแฟล็ก “เปิดใช้งานฟีเจอร์แพลตฟอร์มเว็บรุ่นทดลอง”
หลังจากเปิดใช้งานการตั้งค่าสถานะ คุณต้องเปิดเบราว์เซอร์ใหม่เพื่อให้การเปลี่ยนแปลงมีผล
อินเทอร์เฟซ HTMLDialogElement
อินเทอร์เฟซ HTMLDialogElement
ซึ่งรวมอยู่ในข้อกำหนด HTML สำหรับองค์ประกอบ <dialog>
มีคุณสมบัติและวิธีการมากมายที่คุณสามารถใช้เพื่อทำให้กล่องโต้ตอบปรากฏขึ้นและหายไป พวกเขามีดังนี้:
วิธีการ:
อินเทอร์เฟซ HTMLDialogElement
มีสามวิธีในการเปิดและปิดกล่องโต้ตอบ
-
show()
: วิธีนี้ใช้เพื่อแสดงไดอะล็อก ผู้ใช้ยังคงสามารถเข้าถึงเนื้อหาอื่นๆ ของเอกสาร HTML ได้ตราบเท่าที่กล่องโต้ตอบเปิดอยู่ -
showModal()
: ใช้เพื่อเรียกใช้ "modal dialog" ซึ่งป้องกันไม่ให้ผู้ใช้เข้าถึงสิ่งใด ๆ ยกเว้นหน้าต่างโต้ตอบบนหน้าเว็บ -
close()
: ใช้เพื่อปิดไดอะล็อก คุณสามารถส่งreturnValue
เป็นพารามิเตอร์ทางเลือกที่จะอัพเดตคุณสมบัติreturnValue
คุณสมบัติ:
มีคุณสมบัติสองอย่างรวมอยู่ในอินเทอร์เฟซ HTMLDialogElement
-
returnValue
: ดึงพารามิเตอร์ที่ถูกเลือกส่งผ่านclose()
-
open
: คุณสมบัตินี้เป็นค่าบูลีน หากtrue
ผู้ใช้จะมองเห็นไดอะล็อก มิฉะนั้นจะถูกซ่อนไว้
กิจกรรม:
เมื่อปิดกล่องโต้ตอบ เหตุการณ์ close
จะเริ่มขึ้น
dialog.addEventListener ('ปิด', ฟังก์ชัน () { รหัสอื่นจะไปที่นี่... });
นอกเหนือจากวิธีการหลักและคุณสมบัติเหล่านี้ <dialog>
องค์ประกอบยังสนับสนุน:
-
form[method="dialog"]
: ใช้เพื่อรวมแบบฟอร์มกับ<dialog>
ใช้ได้เฉพาะในกล่องโต้ตอบ -
autofocus attribute
: ใช้เพื่อกำหนดโฟกัสให้กับตัวควบคุมฟอร์มภายในกล่องโต้ตอบ -
cancel event
: เหตุการณ์การcancel
จะเริ่มต้นขึ้นเมื่อปิดกล่องโต้ตอบโมดอลผ่าน "Esc"
หลังจากที่เข้าใจพื้นฐานขององค์ประกอบ <dialog>
แล้ว มาลองทำตัวอย่างกัน
การสร้างไดอะล็อก
ประการแรก ผมจะแสดงให้คุณเห็นถึงวิธีการสร้างไดอะล็อกอย่างง่าย รหัสที่ให้ไว้ด้านล่างกำหนดองค์ประกอบ <dialog>
อย่างง่ายพร้อมเนื้อหาบางส่วน ปุ่มปิดเพื่อซ่อนกล่องโต้ตอบ และปุ่มแสดงเพื่อเปิดกล่องโต้ตอบ
เมื่อคุณทดสอบโค้ดด้านบนในเบราว์เซอร์ของคุณ คุณจะไม่เห็นอะไรเลยนอกจากปุ่ม "แสดงกล่องโต้ตอบ" ที่ไม่มีฟังก์ชันใดๆ ดังที่แสดงในภาพหน้าจอด้านล่าง:
ในการเปิดและปิดองค์ประกอบ <dialog>
คุณต้องใช้ JavaScript .show( .show()
และ . .close()
(การทำงาน() { กล่องโต้ตอบ var = document.getElementById('Dialog'); document.getElementById ('showDialog').onclick = ฟังก์ชั่น () { ไดอะล็อก.show(); }; document.getElementById ('closeDialog').onclick = ฟังก์ชั่น () { ไดอะล็อก.close(); }; })();
ตอนนี้ หากคุณคลิกปุ่ม "แสดงกล่องโต้ตอบ" คุณจะเห็นหน้าต่างโต้ตอบในเบราว์เซอร์ การคลิก "ออก" จะปิดหน้าต่างโต้ตอบ นี่คือภาพหน้าจอ:
การเพิ่มสไตล์ให้กับ Dialog
คุณสามารถเพิ่มสไตล์ CSS ให้กับไดอะล็อกของคุณ เช่นเดียวกับที่คุณทำกับองค์ประกอบอื่นๆ ตามค่าเริ่มต้น หน้าต่างโต้ตอบจะแสดงในแนวนอนโดยวางซ้อนองค์ประกอบอื่นๆ หากคุณพอใจกับตำแหน่งเริ่มต้นและรูปลักษณ์ ไม่จำเป็นต้องใช้ CSS เพิ่มเติม มิฉะนั้น คุณสามารถเพิ่ม CSS ของคุณเองเพื่อให้พอดีและออกแบบหน้าต่างโต้ตอบตามรสนิยมของคุณ อย่างที่ฉันได้ทำไปแล้วด้านล่าง:
กล่องโต้ตอบ { ด้านบน: 28%; ความกว้าง: 400px; เส้นขอบ: 1px ของแข็ง rgba(0, 0, 0, 0.3); รัศมีเส้นขอบ: 15px; กล่องเงา: 0 3px 7px rgba(0, 0, 0, 0.3); ขอบบน: 5px ทึบ #eb9816; } ปุ่ม{ แสดง: บล็อกอินไลน์; รัศมีเส้นขอบ: 3px; เส้นขอบ: ไม่มี; ขนาดตัวอักษร: 0.9rem; ช่องว่างภายใน: 0.4rem 0.8em; พื้นหลัง: #eb9816; ขอบล่าง: 1px ทึบ #f1b75c; สี: ขาว; font-weight: ตัวหนา; ระยะขอบ: 0 0.25rem; จัดข้อความ: ศูนย์; } ปุ่ม: โฮเวอร์, ปุ่ม: โฟกัส { ความทึบ: 0.92; เคอร์เซอร์: ตัวชี้; }
การสร้าง Modal Dialog
ถ้าคุณต้องการป้องกันไม่ให้ผู้ใช้ของคุณเข้าถึงเนื้อหาของ HTML คุณสามารถใช้หน้าต่างโต้ตอบโมดอลได้ เนื่องจากหน้าต่างโต้ตอบโมดอลทำให้สิ่งอื่น ๆ ทั้งหมดที่ไม่ใช่กล่องโต้ตอบปรากฏขึ้นเป็นสีเทา ผู้ใช้จะไม่สามารถเลือกข้อความที่เป็นสีเทาหรือคลิกเพื่อเลือกปุ่มในขณะที่หน้าต่างโต้ตอบเปิดอยู่
การสร้างโมดอลคล้ายกับการสร้างไดอะล็อก โดยมีความแตกต่างเพียงอย่างเดียวคือการใช้ .showModal()
แทน .show()
ไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ ในโค้ด HTML
(การทำงาน() { กล่องโต้ตอบ var = document.getElementById('Dialog'); document.getElementById ('showDialog').onclick = ฟังก์ชั่น () { โต้ตอบ showModal(); }; document.getElementById ('closeDialog').onclick = ฟังก์ชั่น () { ไดอะล็อก.close(); }; })();
ในขณะที่ไดอะล็อกเริ่มต้นแสดงอยู่กึ่งกลางแนวนอน ไดอะล็อกโมดอลจะแสดงในแนวตั้งและกึ่งกลางแนวนอนในวิวพอร์ต นอกจากนี้ คุณสามารถปิดกล่องโต้ตอบโมดอลได้ด้วยการกดปุ่ม "Escape"
การเพิ่มสีพื้นหลังกล่องโต้ตอบโมดอล
<dialog>
องค์ประกอบมีองค์ประกอบหลอกที่เรียกว่า "::backdrop"
ซึ่งใช้งานได้กับ Modal Dialogs เท่านั้น เมื่อใช้องค์ประกอบนี้ คุณสามารถหรี่หน้าหลักเพื่อสื่อสารกับผู้ใช้ว่าไม่สามารถเข้าถึงได้ คุณสามารถจัดตำแหน่งและจัดรูปแบบฉากหลังโดยใช้ประโยชน์จากคุณสมบัติ CSS มาตรฐาน:
กล่องโต้ตอบ::ฉากหลัง{ ตำแหน่ง: คงที่; ด้านบน: 0; ซ้าย: 0; ขวา: 0; ด้านล่าง: 0; พื้นหลังสี: rgba(0, 0, 0, 0.7); }
การใช้ <dialog>
กับ Form
แบบฟอร์มสามารถรวมเข้ากับองค์ประกอบ <dialog>
โดยใช้ form method="dialog"
เมื่อส่งแบบฟอร์ม หน้าต่างโต้ตอบจะปิดและส่งกลับค่าของปุ่มส่งผ่านคุณสมบัติไดอะล็อก. dialog.returnValue
นี่คือรหัส HTML สำหรับกล่องโต้ตอบแบบฟอร์ม:
ใช้ JavaScript ต่อไปนี้สำหรับกล่องโต้ตอบแบบฟอร์ม
var formDialog = document.getElementById('formDialog'); document.getElementById('showformDialog').onclick = function() { formDialog.showModal(); }; document.getElementById('submit').onclick = function() { formDialog.close(ค่า); }; document.getElementById ('formDialog').addEventListener ('ปิด', ฟังก์ชัน () { alert(formDialog.returnValue); });
หมายเหตุ : เพื่อความเข้าใจที่ดีขึ้น ฉันใช้ formDialog
แทน Dialog
ในการสาธิตของฉัน
หากคุณต้องการดูการทำงานขององค์ประกอบ <dialog>
หรือลองใช้โค้ด ดูการสาธิตสดที่นี่
บทสรุป
ด้วยการกลับชาติมาเกิดขององค์ประกอบ <dialog>
ทำให้นักพัฒนาสามารถสร้างไดอะล็อกโดยไม่ต้องใช้ปลั๊กอิน jQuery ได้ง่ายขึ้น แม้ว่า Chrome Canary และ Safari 6.0 จะตีความองค์ประกอบ <dialog>
อย่างถูกต้อง แต่ก็มี polyfill ให้เลือกใช้เพื่อให้แน่ใจว่าเบราว์เซอร์อื่นๆ จะสนับสนุนองค์ประกอบดังกล่าว
หากคุณต้องการเรียนรู้เกี่ยวกับคุณสมบัติ HTML5 อื่นๆ คุณอาจต้องการตรวจสอบ Getting to Grips with the HTML5 File API หรือคุณอาจต้องการเรียนรู้เกี่ยวกับแอตทริบิวต์เมนูบริบท HTML5