ผู้ฟังเหตุการณ์แฝงคืออะไร


180

ในขณะที่กำลังทำงานเพื่อเพิ่มประสิทธิภาพสำหรับแอปเว็บโปรเกรสซีฟฉันได้พบกับคุณสมบัติใหม่Passive Event Listenersและฉันพบว่ามันยากที่จะเข้าใจแนวคิด

อะไรคือPassive Event Listenersสิ่งที่จำเป็นต้องมีในโครงการของเรา


คำตอบ:


213

ฟังเหตุการณ์แบบพาสซีฟเป็นมาตรฐานใหม่ของเว็บฟีเจอร์ใหม่ที่จัดส่งใน Chrome 51 ซึ่งมีศักยภาพในการเลื่อนที่สำคัญ บันทึกย่อประจำรุ่นของ Chrome

ช่วยให้นักพัฒนาสามารถเลือกใช้งานการเลื่อนที่ดีขึ้นได้โดยไม่จำเป็นต้องเลื่อนเพื่อบล็อกผู้ฟังเหตุการณ์แบบสัมผัสและวงล้อ

ปัญหา:เบราว์เซอร์รุ่นใหม่ทั้งหมดมีคุณสมบัติการเลื่อนแบบเธรดเพื่อให้การเลื่อนทำงานได้อย่างราบรื่นแม้ในขณะที่จาวาสคริปต์ราคาแพงกำลังทำงานอยู่ แต่การเพิ่มประสิทธิภาพนี้พ่ายแพ้บางส่วนโดยไม่ต้องรอผลลัพธ์ของตัวจัดการtouchstartและtouchmoveตัวจัดการซึ่งอาจป้องกันการเลื่อนทั้งหมดpreventDefault()ในเหตุการณ์

สารละลาย: {passive: true}

ด้วยการทำเครื่องหมายผู้ฟังแบบสัมผัสหรือวงล้อเป็นพาสซีฟผู้พัฒนามีแนวโน้มว่าผู้ดูแลจะไม่เรียกpreventDefaultให้ปิดการเลื่อน This frees the browser up to respond to scrolling immediately without waiting for JavaScript, thus ensuring a reliably smooth scrolling experience for the user.

document.addEventListener("touchstart", function(e) {
    console.log(e.defaultPrevented);  // will be false
    e.preventDefault();   // does nothing since the listener is passive
    console.log(e.defaultPrevented);  // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);

ข้อมูลจำเพาะ DOM , วิดีโอสาธิต , Explainer Doc


1
ดังนั้นเราควรเพิ่มบรรทัดของรหัสนี้ (อย่างน้อยที่สุดสำหรับกรณีส่วนใหญ่) ใช่ไหม?
Altiano Gerung

สิ่งนี้ขัดข้องเอ็นจิน js ของคุณใน Mozilla คุณควรตรวจสอบเบราว์เซอร์ก่อนที่จะแนบผู้ฟังเหตุการณ์นี้
yardpenalty.com

@AltianoGerung เมื่อเบราว์เซอร์แนะนำ คุณจะเห็นข้อความในแท็บข้อมูลหรือคำเตือนของคอนโซล
snowYetis

@ yardpenalty.com เราสามารถใช้ polyfill ต่อไปนี้และหลีกเลี่ยงการตรวจสอบเบราว์เซอร์ สำหรับการเลื่อนการใช้งานกรณีการใช้ passive event listeners เป็นข้อดีอย่างมาก github.com/WICG/EventListenerOptions/blob/gh-pages/…
Vikrant Siwach

@Vikrant Siwach คำแนะนำที่ดี Polyfill นั้นรวดเร็วและไม่เจ็บปวดเมื่อคุณจัดการทั้งหมดในสมมติว่า polyfill.js
yardpenalty.com
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.