iOS 15已经发布,带来了普遍使用的下拉刷新功能的新版Safari。无论你喜欢与否,单页应用程序不太喜欢这个功能。
以下是在iPhone上禁用Chrome中此功能的方法:
禁用iPhone上Chrome的下拉刷新
有没有办法在iOS 15的Safari中实现相同的功能?
CSS
overscroll-behavior-y: contain
不起作用。overscroll-behavior-y: contain
不起作用。我们使用的非常简单的解决方案是为元素设置overflow: hidden;
,但是这样你需要有一个溢出容器元素来承载所有内容,否则滚动会被阻止。
<body>
<div id="container"> Content </div>
</body>
body {
overflow: hidden;
}
#container {
height: 100vh;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
body {
overflow: hidden;
}
我通过将目标元素的CSS属性touch-action设置为none来禁用了此行为。
touch-action:none;
https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
body
中添加了touch-action:none
,然后解决了这个问题。 - Himavan这里是棘手的部分:
/* prevent pull-to-refresh for Safari 16+ */
@media screen and (pointer: coarse) {
@supports (-webkit-backdrop-filter: blur(1px)) and (overscroll-behavior-y: none) {
html {
min-height: 100.3%;
overscroll-behavior-y: none;
}
}
}
/* prevent pull-to-refresh for Safari 9~15 */
@media screen and (pointer: coarse) {
@supports (-webkit-backdrop-filter: blur(1px)) and (not (overscroll-behavior-y: none)) {
html {
height: 100%;
overflow: hidden;
}
body {
margin: 0px;
max-height: 100%; /* or `height: calc(100% - 16px);` if body has default margin */
overflow: auto;
-webkit-overflow-scrolling: touch;
}
/* in this case to disable pinch-zoom, set `touch-action: pan-x pan-y;` on `body` instead of `html` */
}
}
/* prevent pull-to-refresh for Chrome 63+ */
body{
overscroll-behavior-y: none;
}
顺便说一下,如果您想要禁用捏合缩放,则可以使用以下代码:
/* prevent pinch-zoom for Chrome 36+, Safari 13+ */
html {
touch-action: pan-x pan-y;
min-height: 100%; /* prevent pinch-zoom at page bottom */
}
这个:
// prevent pinch-zoom for iOS Safari 9~12
if (window.GestureEvent && !('touchAction' in document.documentElement.style)) {
document.documentElement.addEventListener('gesturestart', (e)=>{e.preventDefault()}, {passive: false, capture:true});
}
还有这个:
<!-- prevent pinch-zoom for Chrome / old Safari -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
iNoBounce在使用一个手指的手势时有效。 假设您用两个手指向下拉动网页(例如),那么您将获得刷新。
目前,对我而言唯一有效的方法是(但它会禁用缩放、滚动和其他触摸功能)使用event.preventDefault()监听“touchmove”,并将被动设置为false。
这个名为iNoBounce(https://github.com/lazd/iNoBounce)的2013库在iOS 15上仍然非常有效。
按照文档中的示例进行简单的复制即可禁用下拉刷新。