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

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

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

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

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

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

คำถามคือควรใช้รูปแบบนี้ที่ไหน

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

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

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

ข่าวดีก็คือ Rick Byers ได้ทดแทนองค์ประกอบนี้เพื่อให้คุณนำไปใช้ได้ในแพลตฟอร์มส่วนใหญ่

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