สัมผัสที่เข้ากันและลื่นไหลยิ่งขึ้น

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

การประมวลผลกิจกรรมการสัมผัส 4 รูปแบบที่แตกต่างกันมีอะไรบ้าง

ความแตกต่างของลักษณะการทำงานระหว่างเบราว์เซอร์ต่างๆ จะแบ่งออกเป็น 4 รูปแบบ

  1. การประมวลผลเหตุการณ์แบบซิงโครนัสปกติ

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

    เบราว์เซอร์: เบราว์เซอร์ Android (Android 4.0.4, 4.3), Safari ในอุปกรณ์เคลื่อนที่ (เมื่อเลื่อน div)

  2. การประมวลผล Touchmove แบบไม่พร้อมกัน

    ระบบจะส่งเหตุการณ์ Touchmove ในระหว่างที่เลื่อน แต่การเลื่อนจะทำงานแบบไม่พร้อมกัน (ระบบจะละเว้นเหตุการณ์ touchmove หลังจากการเลื่อนเริ่ม) ซึ่งอาจทำให้เกิด "การจัดการซ้ำซ้อน" ของเหตุการณ์ เช่น การเลื่อนอย่างต่อเนื่องหลังจากที่เว็บไซต์ดำเนินการด้วย Touchmove และเรียก preventDefault บนเหตุการณ์ เพื่อบอกเบราว์เซอร์ว่าไม่ต้องจัดการเหตุการณ์นั้น

    เบราว์เซอร์: Safari ในอุปกรณ์เคลื่อนที่ (เมื่อเลื่อนเอกสาร), Firefox

  3. แตะย้ายค้างไว้ขณะเลื่อน

    ระบบไม่ส่งกิจกรรม Touchmove หลังจากการเลื่อนเริ่มต้น และจะไม่กลับมาทำงานอีกจนกว่าจะจบเหตุการณ์แบบสัมผัส ในโมเดลนี้ การบอกความแตกต่างระหว่างการแตะอยู่กับที่และการเลื่อนทำได้ยาก

    เบราว์เซอร์: เบราว์เซอร์ Samsung (ส่งเหตุการณ์ mousemove)

  4. ยกเลิกการแตะเมื่อเริ่มการเลื่อน

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

    เบราว์เซอร์: Chrome Desktop M32+, Chrome Android

ทำไมจึงต้องเปลี่ยน

ปัจจุบัน Chrome สำหรับ Android ใช้เวอร์ชันเก่าของ Chrome: แตะยกเลิกเมื่อเลื่อน ซึ่งช่วยเพิ่มประสิทธิภาพของการเลื่อน แต่ก็ทำให้นักพัฒนาซอฟต์แวร์เกิดความสับสน โดยเฉพาะอย่างยิ่ง นักพัฒนาแอปบางรายไม่ทราบถึงเหตุการณ์ "สัมผัสยกเลิก" หรือวิธีการ จัดการกับเรื่องนี้ และทำให้บางเว็บไซต์ใช้งานไม่ได้ ที่สำคัญไปกว่านั้น เอฟเฟกต์และลักษณะการทำงานของการเลื่อน UI ทั้งหมด เช่น พุลเพื่อรีเฟรช แถบซ่อน และจุดสแนปชอตนั้นนำไปใช้ได้ยากหรือเป็นไปไม่ได้

แทนที่จะเพิ่มฟีเจอร์แบบฮาร์ดโค้ดไว้ เพื่อรองรับเอฟเฟกต์เหล่านี้ Chrome มุ่งให้ความสำคัญกับการเพิ่มแพลตฟอร์มพื้นฐานที่ช่วยให้นักพัฒนาซอฟต์แวร์ เพื่อนำเอฟเฟ็กต์เหล่านี้ไปใช้โดยตรง ดูแพลตฟอร์มเว็บที่สมเหตุสมผล เพื่อแสดงปรัชญานี้โดยทั่วไป

โมเดลใหม่ของ Chrome: โมเดล Touchmove แบบไม่พร้อมกันที่มีการควบคุม

Chrome ขอแนะนำลักษณะการทำงานใหม่ ที่ออกแบบมาเพื่อปรับปรุงความเข้ากันได้กับโค้ดที่เขียนสำหรับเบราว์เซอร์อื่นๆ เมื่อ การเลื่อนหน้าจอ รวมถึงการเปิดใช้งานสถานการณ์อื่นๆ ที่ขึ้นอยู่กับการติดต่อสัมผัส เหตุการณ์ขณะเลื่อน ฟีเจอร์นี้จะเปิดใช้โดยค่าเริ่มต้น และคุณสามารถเปิดใช้งานได้ ปิดด้วยแฟล็กต่อไปนี้ chrome://flags\#touch-scrolling-mode

ลักษณะการทำงานใหม่มีดังนี้

  • ระบบจะส่งการแตะย้ายแรกแบบซิงโครนัสเพื่อให้เลื่อน ยกเลิกแล้ว
  • ขณะเลื่อนดูเนื้อหา
    • ระบบจะส่งเหตุการณ์ touchmove แบบไม่พร้อมกัน
    • ควบคุมเป็น 1 เหตุการณ์ต่อ 200 ms หรือถ้า CSS 15px ไม่ทำงาน เกิน
    • Event.cancelable เป็น false
  • ไม่เช่นนั้น เหตุการณ์แบบสัมผัสย้ายจะเริ่มทํางานแบบพร้อมกันตามปกติเมื่อมีการเลื่อนแบบแอ็กทีฟ สิ้นสุดหรือดำเนินการไม่ได้เนื่องจากถึงขีดจำกัดการเลื่อนแล้ว
  • เหตุการณ์การแตะทุกครั้งจะเกิดขึ้นเมื่อผู้ใช้ยกนิ้วขึ้น

คุณสามารถลองการสาธิตนี้ได้ใน Chrome สำหรับ Android และสลับ chrome://flags\#touch-scrolling-mode เพื่อดูความแตกต่าง

บอกให้เรารู้ว่าคุณคิดอย่างไร

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