나는 tfe에 의해 솔루션에 약간의 조정을 제공합니다 . 특히, 스크롤 막대가로 설정되어있을 때 페이지 내용 (일명 page shift )이 이동하지 않도록 추가 제어 기능을 추가 했습니다.hidden
.
두 자바 스크립트 기능 lockScroll()
과는 unlockScroll()
잠금 및 페이지 스크롤 잠금을 해제하기 위해 각각 정의 할 수 있습니다.
function lockScroll(){
$html = $('html');
$body = $('body');
var initWidth = $body.outerWidth();
var initHeight = $body.outerHeight();
var scrollPosition = [
self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
];
$html.data('scroll-position', scrollPosition);
$html.data('previous-overflow', $html.css('overflow'));
$html.css('overflow', 'hidden');
window.scrollTo(scrollPosition[0], scrollPosition[1]);
var marginR = $body.outerWidth()-initWidth;
var marginB = $body.outerHeight()-initHeight;
$body.css({'margin-right': marginR,'margin-bottom': marginB});
}
function unlockScroll(){
$html = $('html');
$body = $('body');
$html.css('overflow', $html.data('previous-overflow'));
var scrollPosition = $html.data('scroll-position');
window.scrollTo(scrollPosition[0], scrollPosition[1]);
$body.css({'margin-right': 0, 'margin-bottom': 0});
}
여기서 <body>
초기 마진이 없다고 가정했습니다 .
위의 솔루션은 대부분의 실제 사례에서 작동하지만 예를 들어 헤더가 포함 된 페이지를 추가로 사용자 정의해야하므로 결정적인 것은 아닙니다 position:fixed
. 이 특별한 경우를 예로 들어 봅시다. 가지고 있다고 가정
<body>
<div id="header">My fixedheader</div>
<!--- OTHER CONTENT -->
</body>
와
#header{position:fixed; padding:0; margin:0; width:100%}
그런 다음, 하나는 기능에 다음 추가해야합니다 lockScroll()
및 unlockScroll()
:
function lockScroll(){
//Omissis
$('#header').css('margin-right', marginR);
}
function unlockScroll(){
//Omissis
$('#header').css('margin-right', 0);
}
마지막으로 여백이나 패딩에 대한 초기 값을 관리하십시오.