ความสามารถของอุปกรณ์อินพุต

Chrome 47 มีฟีเจอร์ใหม่ที่ช่วยให้คุณเข้าใจง่ายขึ้นว่าผู้ใช้ โต้ตอบกับเว็บไซต์อย่างไร นั่นคือ InputDeviceCapabilities! ย้อนกลับไปอีกหน่อยและเรียนรู้ว่าสิ่งนี้สำคัญอย่างไร

เหตุการณ์อินพุต DOM เป็นนามธรรมที่อยู่เหนือเหตุการณ์อินพุตระดับต่ำ โดยเชื่อมโยง กับอินพุตของอุปกรณ์จริงอย่างหลวมๆ (เช่น เหตุการณ์ click สามารถเริ่มทำงานโดยใช้เมาส์ หน้าจอสัมผัส หรือแป้นพิมพ์) แต่กลับมีปัญหาเพราะไม่มีวิธีง่ายๆ ในการดูรายละเอียดของอุปกรณ์ที่ก่อให้เกิดเหตุการณ์

นอกจากนี้ อินพุตบางประเภทยังสร้างเหตุการณ์อินพุต DOM "ปลอม" ได้อีกด้วยเหตุผลด้านความเข้ากันได้ เหตุการณ์ DOM ปลอมดังกล่าวจะเกิดขึ้นเมื่อผู้ใช้แตะหน้าจอสัมผัส (เช่น บนโทรศัพท์มือถือ) เหตุการณ์ดังกล่าวไม่เพียงแค่เริ่มเหตุการณ์การแตะเท่านั้น แต่ยังเรียกให้เหตุการณ์เกี่ยวกับเมาส์เริ่มทำงานด้วยด้วยเหตุผลด้านความเข้ากันได้

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

InputDeviceCapabilities API ใหม่ให้รายละเอียดเกี่ยวกับแหล่งที่มาสำคัญ ของเหตุการณ์อินพุตผ่านออบเจ็กต์ sourceCapabilities ใน UIEvent
ออบเจ็กต์มีพร็อพเพอร์ตี้ firesTouchEvents ที่ตั้งค่าเป็น true หรือ false ตาม วิธีสร้างเหตุการณ์จากการดำเนินการของผู้ใช้

คำถามคือ ควรใช้ที่ใด

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

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

function addMouseEventListener(target, type, handler, capture) {  
    target.addEventListener(type, function(e) {  
    if (e.sourceCapabilities.firesTouchEvents)  
        return false;  
    return handler(e);  
    }, capture);  
}

ข่าวดีก็คือวิดีโอนี้ได้รับการ Polyfilled โดย Rick Byers เพื่อให้คุณใช้งานได้ในแพลตฟอร์มส่วนใหญ่

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