Fab*_*geb 42 javascript css safari jquery osx-lion
我只想在Safari(OSX Lion)中调整弹性滚动/弹跳效果.
我找到了overflow: hidden
在css中为body 设置的解决方案,但正如预期的那样它只会禁用滚动条,所以如果网站比屏幕"更长",你将无法滚动!
欢迎任何解决方案或提示!谢谢!
Ain*_*aer 59
您可以通过应用以下CSS更普遍地实现此目的:
html,
body {
height: 100%;
width: 100%;
overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)
这允许您的内容,无论它是什么,都可以在其中滚动body
,但请注意,scroll
事件被触发的滚动上下文现在document.body
不是window
.
Yis*_*ela 14
如果你overflow:hidden
在<body>
元素上使用hack ,为了恢复正常的滚动行为,你可以将一个<div>
绝对的内部放置在元素内部以便向后滚动overflow:auto
.我认为这是最好的选择,只使用css很容易实现!
或者,您可以尝试使用jQuery:
$(document).bind(
'touchmove',
function(e) {
e.preventDefault();
}
);
Run Code Online (Sandbox Code Playgroud)
在javasrcipt中也是如此:
document.addEventListener(
'touchmove',
function(e) {
e.preventDefault();
},
false
);
Run Code Online (Sandbox Code Playgroud)
最后一个选项,检查ipad safari:禁用滚动和弹跳效果?
sun*_*rls 11
overflow:hidden;-webkit-overflow-scrolling:touch
在iOS safari 8.1上不能正常工作,因为固定标题将超出可见区域.
正如@Yisela所说,css应放在.container
(<div>
下面<body>
).这似乎没问题(在Safari 8.1上的leas)
我将演示放在我的博客上:http: //tech.colla.me/en/show/disable_elastic_scroll_on_iOS_safari
Mar*_*tin 10
我在iPad上解决了它.尝试,如果它也适用于OSX.
body, html { position: fixed; }
仅当您的内容小于屏幕或使用某些布局框架(在我的情况下为Angular Material)时才有效.
在Angular Material中,您可以禁用整页的过度滚动效果,但内部部分<md-content>
仍然可以滚动.
我做了一个扩展,在所有网站上禁用它.在这样做时,我使用了三种技术:纯CSS,纯JS和混合.
CSS版本与上述解决方案类似.JS有点像这样:
var 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);
Run Code Online (Sandbox Code Playgroud)
当一个人使用position:fixed元素并让浏览器进行滚动时,CSS工作.当一些其他JS依赖于窗口(例如事件)时,需要JS一个,这将被前一个CSS阻止(因为它使得主体滚动而不是窗口),并且通过停止边缘处的事件传播来工作,但需要合成非边缘分量的滚动; 缺点是它阻止了某些类型的滚动(那些与CSS一起工作).当滚动到达边缘(JS)时,混合方法尝试通过选择性地禁用方向性溢出(CSS)来采取混合方法,并且理论上可以在两种情况下都起作用,但是当前并不是因为它在极限处有一些余地.
因此,根据一个网站的实现,需要采取一种方法或另一种方法.
如果需要更多详细信息,请参阅此处:https://github.com/lloeki/unelastic