Css + Javascript 解决方案:
css 类禁用滚动
.lock-scroll{
position: fixed;
width: 100%;
height: 100%;
}
应用css类后修复scrollTop跳转的javascript代码:
function disableScroll(elem){
var lastScrollTop = $(elem).scrollTop();
$(elem).addClass("lock-scroll");
$(elem).css("top", "-" + lastScrollTop + "px");
}
function enableScroll(elem){
var lastScrollTop = Number($('#wmd-input-39380954').css("top").match(/[0-9]/g).join(""));
$(elem).removeClass("lock-scroll");
$(elem).css("top", "0px");
$(elem).scrollTop(lastScrollTop);
}
禁用按目标元素滚动
index.html:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<style>
body{
background-color:#333333;
color: white;
}
#modalView{
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0,0,0,0.6);
overflow: scroll;
}
#modalViewScroll{
width: 300px;
height: 200px;
overflow: scroll;
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
margin: auto;
background: white;
color: red;
}
</style>
</head>
<body>
BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>BODY SCROLL 1<br/>_____________<br/>BODY SCROLL 2<br/>_____________<br/>BODY SCROLL 3<br/>_____________<br/>BODY SCROLL 4<br/>_____________<br/>BODY SCROLL 5<br/>_____________<br/>BODY SCROLL 6<br/>_____________<br/>BODY SCROLL 7<br/>_____________<br/>BODY SCROLL 8<br/>_____________<br/>BODY SCROLL 9<br/>_____________<br/>
<div id="modalView">
<div id="modalViewScroll">
MODAALLLL SCROLL 1<br/>__________________<br/>MODAALLLL SCROLL 2<br/>__________________<br/>MODAALLLL SCROLL 3<br/>__________________<br/>MODAALLLL SCROLL 4<br/>__________________<br/>MODAALLLL SCROLL 5<br/>__________________<br/>MODAALLLL SCROLL 6<br/>__________________<br/>MODAALLLL SCROLL 7<br/>__________________<br/>MODAALLLL SCROLL 8<br/>__________________<br/>MODAALLLL SCROLL 9<br/>__________________<br/>MODAALLLL SCROLL 1<br/>__________________<br/>MODAALLLL SCROLL 2<br/>__________________<br/>MODAALLLL SCROLL 3<br/>__________________<br/>
</div>
</div>
<script type="text/javascript">
function scrollDisabled(e){
// Two option :
//
// 1) scroll anywhere will scroll the modal but you have to handle scroll state, and disable scroll with close modal
//
// if(scrollingModal){
// $('#modalViewScroll').scrollTop($('#modalViewScroll').scrollTop() + e.deltaY);
// return true;
// }
// 2) scroll only above the modal
if (e.target.id == "modalViewScroll") {
$('#modalViewScroll').scrollTop($('#modalViewScroll').scrollTop() + e.deltaY);
return true;
}
}
function preventDefaultForScrollKeys(e) {
if(scrollDisabled(e)){
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
}
function preventDefault(e) {
if(scrollDisabled(e)){
e = e || window.event;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
}
function hookScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
hookScroll();
</script>
</body>
</html>
为了避免在点击事件触发时滚动到顶部
必须在点击事件后添加return false;;
示例:
<button onclick="openModal(); return false;">Open Modal</button>
在移动浏览器中禁用滚动
您还需要为<html> 标签设置overflow:hidden。
示例:
<html>
<head>
<style>
html,body{overflow:hidden}
</style>
</head>
<body>
// You html body
</body>
</html>