ขัดกับสิ่งที่คนส่วนใหญ่ที่นี่จะบอกผมอยากแนะนำให้คุณทำใช้ปลั๊กอินถ้าคุณต้องการให้เคลื่อนไหวการย้าย เพียงแค่การเคลื่อนไหว scrollTop ไม่เพียงพอสำหรับประสบการณ์การใช้งานที่ราบรื่น ดูคำตอบของฉันที่นี่เพื่อหาเหตุผล
ฉันลองใช้งานปลั๊กอินมาหลายปีแล้ว แต่ในที่สุดฉันก็เขียนเอง คุณอาจต้องการที่จะให้มันหมุน: jQuery.scrollable การใช้สิ่งนั้นการเลื่อนจะกลายเป็น
$container.scrollTo( targetPosition );
แต่นั่นไม่ใช่ทั้งหมด เราจำเป็นต้องแก้ไขตำแหน่งเป้าหมายด้วย การคำนวณที่คุณเห็นในคำตอบอื่น ๆ
$target.offset().top - $container.offset().top + $container.scrollTop()
ส่วนใหญ่ใช้งานได้ แต่ไม่ถูกต้องทั้งหมด ไม่จัดการกับเส้นขอบของคอนเทนเนอร์เลื่อนอย่างเหมาะสม องค์ประกอบเป้าหมายถูกเลื่อนขึ้นไปไกลเกินไปตามขนาดของเส้นขอบ นี่คือตัวอย่าง
ดังนั้นวิธีที่ดีกว่าในการคำนวณตำแหน่งเป้าหมายคือ
var target = $target[0],
container = $container[0];
targetPosition = $container.scrollTop() + target.getBoundingClientRect().top - container.getBoundingClientRect().top - container.clientTop;
ลองดูตัวอย่างเพื่อดูตัวอย่าง
สำหรับฟังก์ชั่นที่ส่งคืนตำแหน่งเป้าหมายและใช้ได้กับทั้งภาชนะบรรจุหน้าต่างและที่ไม่ใช่หน้าต่างให้ใช้ส่วนสำคัญนี้ได้ฟรี ความคิดเห็นในนั้นอธิบายวิธีคำนวณตำแหน่ง
ในการเริ่มต้นฉันได้กล่าวว่าจะเป็นการดีที่สุดที่จะใช้ปลั๊กอินสำหรับการเลื่อนภาพเคลื่อนไหว อย่างไรก็ตามคุณไม่จำเป็นต้องมีปลั๊กอินหากคุณต้องการข้ามไปยังเป้าหมายโดยไม่มีการเปลี่ยน ดูคำตอบโดย @Jamesสำหรับสิ่งนั้น แต่ให้แน่ใจว่าคุณคำนวณตำแหน่งเป้าหมายอย่างถูกต้องหากมีเส้นขอบรอบ ๆ คอนเทนเนอร์