การสร้าง 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
