ฉันชอบที่จะใช้วิธีการ "ล้น: ซ่อน" และเพียงเพิ่มการเติมขวาที่เท่ากับความกว้างของแถบเลื่อน
ฟังก์ชั่นได้รับความกว้างของแถบเลื่อนโดยlostsource
function getScrollbarWidth() {
var outer = document.createElement("div");
outer.style.visibility = "hidden";
outer.style.width = "100px";
outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps
document.body.appendChild(outer);
var widthNoScroll = outer.offsetWidth;
// force scrollbars
outer.style.overflow = "scroll";
// add innerdiv
var inner = document.createElement("div");
inner.style.width = "100%";
outer.appendChild(inner);
var widthWithScroll = inner.offsetWidth;
// remove divs
outer.parentNode.removeChild(outer);
return widthNoScroll - widthWithScroll;
}
เมื่อแสดงโอเวอร์เลย์ให้เพิ่มคลาส "noscroll" ใน html และเพิ่มการเติมเต็มไปทางขวา:
$(html).addClass("noscroll");
$(body).css("paddingRight", getScrollbarWidth() + "px");
เมื่อซ่อนเอาชั้นเรียนและช่องว่างภายใน:
$(html).removeClass("noscroll");
$(body).css("paddingRight", 0);
สไตล์ noscroll เป็นเพียงแค่นี้:
.noscroll { overflow: hidden; }
โปรดทราบว่าหากคุณมีองค์ประกอบใด ๆ ที่มีตำแหน่ง: แก้ไขคุณต้องเพิ่มช่องว่างภายในองค์ประกอบเหล่านั้นด้วย