다음은 응용 프로그램에서 사용한 솔루션입니다.
본문 오버플로를 비활성화하고 전체 웹 사이트 html을 컨테이너 div 안에 배치했습니다. 웹 사이트 컨테이너에 오버플로가 있으므로 사용자가 예상대로 페이지를 스크롤 할 수 있습니다.
그런 다음 전체 웹 사이트를 포괄하는 더 높은 Z- 색인으로 형제 div (#Prevent)를 만들었습니다. #Prevent는 Z- 색인이 더 높기 때문에 웹 사이트 컨테이너와 겹칩니다. #Prevent가 표시되면 마우스가 더 이상 웹 사이트 컨테이너를 가리 키지 않으므로 스크롤이 불가능합니다.
물론 마크 업에서 #Prevent보다 Z- 색인이 더 높은 모달과 같은 다른 div를 배치 할 수 있습니다. 이를 통해 스크롤 문제가없는 팝업 창을 만들 수 있습니다.
이 솔루션은 스크롤바를 숨기지 않기 때문에 더 좋습니다 (점프 효과). 이벤트 리스너가 필요하지 않으며 구현하기 쉽습니다. 모든 브라우저에서 작동하지만 IE7 및 8에서는 플레이해야합니다 (특정 코드에 따라 다름).
HTML
<body>
<div id="YourModal" style="display:none;"></div>
<div id="Prevent" style="display:none;"></div>
<div id="WebsiteContainer">
<div id="Website">
website goes here...
</div>
</div>
</body>
CSS
body { overflow: hidden; }
#YourModal {
z-index:200;
/* modal styles here */
}
#Prevent {
z-index:100;
position:absolute;
left:0px;
height:100%;
width:100%;
background:transparent;
}
#WebsiteContainer {
z-index:50;
overflow:auto;
position: absolute;
height:100%;
width:100%;
}
#Website {
position:relative;
}
jquery / js
function PreventScroll(A) {
switch (A) {
case 'on': $('#Prevent').show(); break;
case 'off': $('#Prevent').hide(); break;
}
}
스크롤 비활성화 / 활성화
PreventScroll('on'); // prevent scrolling
PreventScroll('off'); // allow scrolling