通过应用以下CSS,您可以更普遍地实现此目标:
html,
body {
height: 100%;
width: 100%;
overflow: auto;
}
这允许您的任何内容在 body
中变得可滚动,但请注意,触发 scroll
事件的滚动上下文现在是 document.body
,而不是 window
。
overscroll-behavior
е’Ң-webkit-overflow-scrolling
жқҘе®һзҺ°зҡ„гҖӮиҝҷз§Қж–№жі•жӣҙеҠ з®ҖжҙҒиҖҢдё”жӣҙжҳ“дәҺз»ҙжҠӨпјҢеӣ дёәе®ғдёҚйңҖиҰҒJavaScriptжқҘе®һзҺ°гҖӮ - angry kiwi<body>
元素上使用overflow:hidden
技巧,为了恢复正常的滚动行为,你可以在该元素内部绝对定位一个<div>
元素,并使用overflow:auto
来实现滚动。我认为这是最好的选择,而且只需要使用css就可以轻松实现!或者,你也可以尝试使用jQuery:$(document).bind(
'touchmove',
function(e) {
e.preventDefault();
}
);
在JavaScript中相同:
document.addEventListener(
'touchmove',
function(e) {
e.preventDefault();
},
false
);
最后一个选项,查看iPad Safari:禁用滚动和反弹效果?
`document.querySelector('div');`
`document.querySelectorAll('.someClass');`
`document.querySelector('#someID');`
- neaumusicoverflow:hidden;-webkit-overflow-scrolling:touch
在iOS Safari 8.1上无法很好地工作,因为固定的标题会超出可见区域。
正如@Yisela所说,CSS应该放在.container
中(即<body>
下面的<div>
)。 这似乎没有问题(至少在safari iOS 8.1上)
我已经将演示放在我的博客上:http://tech.colla.me/en/show/disable_elastic_scroll_on_iOS_safari
我在iPad上解决了它。如果你在OSX上也试试看。
body,html { position:fixed; }
仅在内容小于屏幕或使用某些布局框架(例如我的Angular Material)时才有效。
在Angular Material中,非常棒的一点是您可以禁用整个页面的超滚动效果,但内部部分<md-content>
仍然可以滚动。
body,html {width:100%;}
以便在IE11中正确呈现。 :( - Martinvar scroll = function(e) {
// compute state
if (stopScrollX || stopScrollY) {
e.preventDefault(); // this one is the key
e.stopPropagation();
window.scroll(scrollToX, scrollToY);
}
}
document.addEventListener('mousewheel', scroll, false);
我尝试了所有"overflow"的解决方案,但都不起作用。我正在使用jQuery编写JavaScript视觉差效果。在OSX上的Chrome和Safari浏览器中,弹性/橡皮筋效果会破坏我的滚动数字,因为它实际上滚动超过文档的高度,并使用越界数字更新窗口变量。我需要检查滚动量是否大于实际文档的高度,像这样:
$(window).scroll(
function() {
if ($(window).scrollTop() + $(window).height() > $(document).height()) return;
updateScroll(); // my own function to do my parallaxing stuff
}
);
您可以检查滚动偏移是否在边界内。如果超出范围,将其设置回来。
var scrollX = 0;
var scrollY = 0;
var scrollMinX = 0;
var scrollMinY = 0;
var scrollMaxX = document.body.scrollWidth - window.innerWidth;
var scrollMaxY = document.body.scrollHeight - window.innerHeight;
// make sure that we work with the correct dimensions
window.addEventListener('resize', function () {
scrollMaxX = document.body.scrollWidth - window.innerWidth;
scrollMaxY = document.body.scrollHeight - window.innerHeight;
}, false);
// where the magic happens
window.addEventListener('scroll', function () {
scrollX = window.scrollX;
scrollY = window.scrollY;
if (scrollX <= scrollMinX) scrollTo(scrollMinX, window.scrollY);
if (scrollX >= scrollMaxX) scrollTo(scrollMaxX, window.scrollY);
if (scrollY <= scrollMinY) scrollTo(window.scrollX, scrollMinY);
if (scrollY >= scrollMaxY) scrollTo(window.scrollX, scrollMaxY);
}, false);
有很多情况下上述CSS解决方案并不适用。例如,在同一页上有一个透明的固定页眉和粘性页脚。为了防止Safari中的顶部弹跳影响页面,导致全屏幻灯片闪烁,可以使用以下方法。
if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {
$window.bind('mousewheel', function(e) {
if (e.originalEvent.wheelDelta / 120 > 0) {
if ($window.scrollTop() < 2) return false;
}
});
}
以上解决方案都不适用于我,但是我将我的内容包装在一个div(#outer-wrap)中,然后使用以下CSS:
body {
overflow: hidden;
}
#outer-wrap {
-webkit-overflow-scrolling: touch;
height: 100vh;
overflow: auto;
}
显然,这仅适用于支持视口宽度/高度的浏览器。
overflow:hidden;
即可。 - www139