เริ่มต้นจากบทของวันนี้ฉันจะมุ่งเน้นไปที่การแนะนำเนื้อหาของการจัดการเหตุการณ์ของ KitJS และพยายามที่จะเปิดเผยให้คุณฟังในภาษาง่าย ๆ ว่า Framework JS หลักใช้ฟังก์ชั่นการจัดการเหตุการณ์อิสระของตัวเองภายใน
(i) เหตุการณ์ DOM ธรรมดา
โดยทั่วไปเราสามารถเขียนเหตุการณ์ใน HTML ได้โดยการสนับสนุน
<a onclick =” การแจ้งเตือน (1)”> ทดสอบ </a>
หรือผูกหลังจากได้รับวัตถุ DOM
document.getElementById ('a'). onclick = function () {Alert (1)}
หรือเหตุการณ์รอง
document.getElementById ('a'). addeventListener ('คลิก', function () {Alert (1)}, flase)
หรือผ่านแท็กสคริปต์
<script for =” a” event =” onclick”> Alert (1) </script>
มาตรฐาน W3C แนะนำวิธีการผูกมัดที่สามข้างต้นซึ่งเป็นวิธีการจัดกิจกรรมรองโดยมีวัตถุประสงค์ในการแยกการพึ่งพาการพึ่งพาอย่างรุนแรงของ HTML และ JS
(ii) คำถาม
อย่างไรก็ตามหากเราใช้โหมด 3 เพียงเพื่อดำเนินการเขียนโปรแกรม JS ของเราโดยตรงมันไม่เพียงพอเพราะเราจะพบปัญหาต่อไปนี้
1. ความเข้ากันได้ของเบราว์เซอร์ พารามิเตอร์ของเบราว์เซอร์ที่ได้รับการสนับสนุนโดย IE Series และ W3C ไม่สอดคล้องกันสำหรับชื่อและพารามิเตอร์วิธีการเชื่อมโยงเหตุการณ์ระดับที่สอง
2. หลังจากเชื่อมโยงผ่านเหตุการณ์ระดับ 2 คุณไม่สามารถรู้ได้ว่าคนอื่นมีเหตุการณ์ที่ถูกผูกไว้กับองค์ประกอบเดียวกันเหตุการณ์ใดที่ถูกผูกมัดและเนื้อหาของเหตุการณ์คืออะไร?
3. หลังจากวิธีการผูกมัดของเหตุการณ์ระดับ 2 จะถูกเรียกใช้คำสั่งไม่ได้อยู่ในลำดับก่อนการผูกมัด แต่จะดำเนินการแบบสุ่ม อย่างไรก็ตามบางครั้งเราจำเป็นต้องสั่งวิธีการที่เรียกใช้
4. เมื่อเหตุการณ์ขององค์ประกอบเดียวกันถูกเรียกใช้ API มาตรฐานของ W3C ไม่สนับสนุนการหยุดและดำเนินการต่อเพื่อเรียกเหตุการณ์อื่น ๆ ที่ผูกพันกับองค์ประกอบเดียวกัน W3C รองรับการหยุดฟองอากาศ
5. หลายครั้งเราลงทะเบียนเหตุการณ์ระดับ 2 ด้วยวิธีการทำงานที่ไม่ระบุชื่อและไม่มีการจัดการในการลงทะเบียนวิธีการดำเนินการเหตุการณ์ที่เหลืออยู่ดังนั้นจึงเป็นการยากที่จะยกเลิกเหตุการณ์ผ่าน removeVentListener
(iii) วิธีแก้ปัญหาของ KIT
ตกลงกรอบ JS มีอยู่เพื่อแก้ปัญหาข้างต้น มาดูกันว่า Kit จัดการกับปัญหาข้างต้นอย่างไร
ใน kit.js API มีวิธี EV (config)
วิธีนี้ยอมรับวัตถุประเภทแผนที่ซึ่งมี 4 พารามิเตอร์ที่สำคัญ
องค์ประกอบ EL ที่ต้องผูกพัน
ประเภทเหตุการณ์สตริง
FN ทริกเกอร์วิธีการดำเนินการ
ขอบเขตสามารถละเว้นได้ไม่ว่าตัวชี้นี้จะต้องมีการระบุหรือไม่ถ้าไม่มี EL ณ เวลาที่ลงทะเบียนจะถูกส่งผ่านเป็นตัวชี้นี้
(iv) การวิเคราะห์รหัส
มาดูการใช้งานรหัสเพิ่มเติม
เริ่มโดยตรงจากส่วนหลัก
หากพารามิเตอร์ขาเข้าไม่ว่างวัตถุจะถูกสร้างขึ้นบนพารามิเตอร์ที่เข้ามาเพื่อบันทึกการลงทะเบียนเหตุการณ์ของ KitJS EVREG
มีวัตถุเด็กสองวัตถุในวัตถุ EVREG หนึ่งอันเรียกว่า Evregev ซึ่งช่วยบันทึกเหตุการณ์ที่ลงทะเบียน
ในวัตถุ EVREGEV ให้บันทึกคีย์เป็นเหตุการณ์ที่ลงทะเบียนปัจจุบันและค่าเป็นอาร์เรย์ ในอาร์เรย์ให้ใส่พารามิเตอร์การกำหนดค่าที่ส่งผ่านในเมธอด EV ตามลำดับก่อนแล้วมาถึง โปรดทราบว่านี่คืออาร์เรย์! - - เนื่องจากอาร์เรย์สามารถบันทึกคำสั่งซื้อสิ่งนี้สำคัญมาก
นอกจากนี้ยังมีวิธีการที่ไม่ระบุชื่อที่เรียกว่า EVREGFN ซึ่งช่วยประหยัดเหตุการณ์
เราจะเห็นว่า EVREGFN เป็นเหตุการณ์ที่ไม่ระบุชื่อ ในตอนแรกมันจะพิจารณาว่าหน้าต่างตัวแปรทั่วโลก [me.constants.kit_event_stopimmediatepropagation] คือ == จริง ถ้าเป็นจริงมันจะกลับมาและจะไม่ดำเนินการต่อไป
จากนั้นมองลงไปมันจะยอมรับวัตถุ EV ที่เกิดจากเหตุการณ์และแนบวัตถุจำนวนมากเข้ากับ EV โดยใช้ Mergeif เช่นเป้าหมาย, เป้าหมายปัจจุบัน, เป้าหมายที่เกี่ยวข้องเพื่อแก้ปัญหาความเข้ากันได้ของเบราว์เซอร์
Stopnow, Stopdefault, Stopgoon เป็นวิธีการที่สร้างขึ้นเพื่อป้องกันไม่ให้เกิดเหตุการณ์ต่อการกระตุ้น
ย่อหน้าต่อไปนี้เป็นกุญแจสำคัญในการ EVREGFN เราจะวนลูปผ่านอาร์เรย์เหตุการณ์ใน EVREGEV ที่สร้างขึ้นก่อนหน้านี้นำพารามิเตอร์การกำหนดค่าที่ส่งผ่านในวิธี EV ก่อนหน้านี้ตามลำดับและดำเนินการวิธีการในพารามิเตอร์การกำหนดค่า หากค่าส่งคืนของวิธีการไม่ว่างเปล่ามันจะส่งคืนค่าผลตอบแทน
ในที่สุดเราทำให้เบราว์เซอร์เข้ากันได้และผูกวิธี EVREGFN ของเราโดยใช้วิธีการจัดกิจกรรมระดับ 2
(v) สรุป
เพียงแค่ใส่ชุดใช้วิธีที่ไม่ระบุชื่อของตัวเองในการแคชที่จัดการการลงทะเบียนเหตุการณ์และป้อนอาร์เรย์เพื่อให้สามารถจดจำลำดับเหตุการณ์รวมทั้งให้รายการเพื่อค้นหาเหตุการณ์ที่ลงทะเบียนก่อนหน้านี้พารามิเตอร์วิธีการ ฯลฯ และในเวลาเดียวกันมันเข้ากันได้กับความเข้ากันได้ของเบราว์เซอร์
(vi) เหตุการณ์ออกจากระบบ
ด้วยการจัดการเหตุการณ์แคช Help Help การเข้าสู่ระบบกลายเป็นเรื่องง่าย
คุณจะเห็นว่าชุดพบการกำหนดค่าเหตุการณ์ที่เกี่ยวข้องผ่านการเปรียบเทียบโดยตรงหรือการเปรียบเทียบ fn.toString และ fn.toString (). การเปรียบเทียบ TRIM () และลบออกจากอาร์เรย์
(vii) การปรับปรุงเหตุการณ์
คุณควรสังเกตว่าตอนนี้ KIT ได้ดำเนินการ Mergeif บนวัตถุเหตุการณ์ระบบ ก่อนอื่นทำไมคุณต้องทำ Megerif? เนื่องจากคุณสมบัติของวัตถุของวัตถุเหตุการณ์ระบบนั้นถูกอ่านอย่างเดียวและไม่สามารถเขียนทับได้คุณสามารถเพิ่มคุณสมบัติที่ไม่มีได้เท่านั้น
คิทสามารถ megerif เท่านั้น เราทุกคนรู้ว่ามีวัตถุเหตุการณ์ที่เข้ากันไม่ได้ของวัตถุเหตุการณ์ของเบราว์เซอร์แต่ละรายการดังนั้น KIT จึงจำเป็นต้องแก้ไขความไม่ลงรอยกันเหล่านี้ ตัวอย่างเช่น IE ไม่มีแอตทริบิวต์เป้าหมายมีเพียง SRCELEMENT เท่านั้น เราสามารถเพิ่มแอตทริบิวต์เป้าหมายลงไปเพื่อให้ได้ความเข้ากันได้ของมาตรฐาน W3C
แน่นอนเพียงแค่ซ่อมแซมไม่สามารถตอบสนองความต้องการของเราได้ หลายครั้งที่เรายังต้องเพิ่มน้ำหนักเล็กน้อยสำหรับวัตถุเหตุการณ์
ตัวอย่างเช่นเมื่อพัฒนาทัชดาวน์และ touchmove บน iPhone เรามักจะต้องได้รับการชดเชยนิ้วเดี่ยวและเพื่อรับการชดเชยนิ้วเดี่ยว ev.targetTouches [0] .Clientx รหัสดังกล่าว แต่เมื่อฟังก์ชั่นที่ไม่ระบุชื่อเป็นเช่นนี้มันจะเข้ากันไม่ได้บนพีซี
จะทำอย่างไร? มันไม่สำคัญเราสามารถให้วัตถุกิจกรรมผสมผสานคุณลักษณะของเราเอง
FirstFingerClientx ฯลฯ เพื่อให้เราสามารถใช้รหัส Unified ที่พัฒนาโดยมือถือและพีซีได้อย่างง่ายดาย
รวมถึงบทความถัดไปจะพูดคุยเกี่ยวกับการลากและวาง HTML5 และเหตุการณ์ท่าทางขั้นสูงขึ้นอยู่กับพื้นฐานนี้
เพิ่มไปยังสิ่งนี้ทำไมไม่เหตุการณ์ใหม่ ๆ เช่น extjs เป็นเพราะ
1. วัตถุพื้นเมืองของระบบมีความสัมพันธ์ในการสืบทอดบางอย่างและไม่ต้องการถูกทำลาย
2. หากคุณใช้วัตถุใหม่ของคุณเองรหัสอาจไม่สามารถทำได้หลังจากออกจากกรอบและเนื้อหารหัสจะต้องเปลี่ยนอีกครั้ง