วิธีใดที่เร็วที่สุดในการตรวจสอบว่าองค์ประกอบมีแถบเลื่อนหรือไม่
สิ่งหนึ่งที่แน่นอนคือการตรวจสอบว่าองค์ประกอบมีขนาดใหญ่กว่าวิวพอร์ตหรือไม่ซึ่งสามารถทำได้อย่างง่ายดายโดยตรวจสอบค่าทั้งสองนี้:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
แต่นั่นไม่ได้หมายความว่ามันมีแถบเลื่อนด้วย (ดังนั้นมนุษย์จึงสามารถเลื่อนได้)
คำถาม
ฉันจะตรวจสอบแถบเลื่อนในเบราว์เซอร์1 แบบไขว้และ2จาวาสคริปต์เท่านั้น (เช่นเดียวกับที่ไม่มี jQuery ) ได้อย่างไร
Javascript เท่านั้นเพราะฉันต้องการค่าใช้จ่ายที่น้อยที่สุดเพราะฉันต้องการเขียนตัวกรองตัวเลือก jQuery ที่รวดเร็วมาก
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
ฉันคิดว่าฉันต้องตรวจสอบการoverflow
ตั้งค่าสไตล์ แต่ฉันจะทำได้อย่างไรในเบราว์เซอร์ข้าม?
แก้ไขเพิ่มเติม
overflow
การตั้งค่าสไตล์ไม่เพียง การตรวจสอบว่าองค์ประกอบมีแถบเลื่อนนั้นไม่สำคัญเท่าที่ควร สูตรแรกที่ฉันเขียนไว้ข้างต้นใช้งานได้ดีเมื่อองค์ประกอบไม่มีเส้นขอบ แต่เมื่อเป็นเช่นนั้น (โดยเฉพาะอย่างยิ่งเมื่อเส้นขอบมีความกว้างมาก) offset
มิติอาจใหญ่กว่าscroll
มิติ แต่องค์ประกอบยังสามารถเลื่อนได้ เราต้องลบเส้นขอบจากoffset
มิติข้อมูลเพื่อให้ได้วิวพอร์ตที่เลื่อนได้จริงขององค์ประกอบและเปรียบเทียบกับscroll
มิติ
สำหรับการอ้างอิงในอนาคต
:scrollable
jQuery selector filter รวมอยู่ใน.scrollintoview()
ปลั๊กอิน jQuery ของฉัน รหัสที่สมบูรณ์สามารถพบได้ในโพสต์บล็อกของฉันหากใครต้องการ แม้ว่าจะไม่ได้ให้รหัสของ Soumya ในการแก้ปัญหาจริงก็ช่วยแก้ปัญหาได้มาก มันชี้ให้ฉันไปในทิศทางที่ถูกต้อง
overflow:hidden
ตั้งไว้? มีเนื้อหาส่วนเกิน แต่ยังไม่สามารถเลื่อนได้ ปัญหาก็ไม่ง่ายอย่างที่คิด