![](/img/trans.png)
[英]How to prevent mobile-safari from jumping when unloading pages from a list on iPad?
[英]Prevent swiping between web pages in iPad Safari
从 iPad 的 Safari 浏览器的左右边缘滑动,在当前打开的网页之间移动。 有什么办法可以防止吗?
我试图在stopPropagation
和preventDefault
的页面边缘添加touchstart
和touchmove
处理程序,但它们似乎没有效果, touch-action
CSS也没有。
2014 年有人问过一个类似的问题,但回答是否定的: iOS 7 - 有没有办法在 Safari 中禁用前后滑动功能?
2018 年现在有解决方法吗?
在iOS中13.4+你现在可以preventDefault
在"touchstart"
假设我们在页面上有一个<div class="block-swipe-nav">
跨越视口的整个宽度,并且我们想要防止在该元素上滑动导航。
const element = document.querySelector('.block-swipe-nav');
element.addEventListener('touchstart', (e) => {
// is not near edge of view, exit
if (e.pageX > 10 && e.pageX < window.innerWidth - 10) return;
// prevent swipe to navigate gesture
e.preventDefault();
});
我写了一篇关于阻止滑动的简短文章,其中包含一些附加信息。
Apple 在 iOS9 之后提供了这些指南。
该指南可让您禁用
滚动
function touchMove(event) { // Prevent scrolling on this element event.preventDefault(); ... }
捏合和缩放
function gestureChange(event) { // Disable browser zoom event.preventDefault(); ... }
您可以按如下方式识别滑动手势:
完整指南是这里的海报。
如果您需要更多帮助,请告诉我。
尼丁,去毒化
你不能,这从 iOS 的早期就一直是个问题。 他们反复在强大的 Web 应用程序功能上犹豫不决,例如 service workers 和 webgl。
你能做的最好的事情就是你应该为每个浏览器做些什么,为每个浏览器使用特征检测来获得最好的体验。 让所有网站在每个浏览器上看起来都一样的日子已经一去不复返了。
如果需要,使用三明治,在支持它的浏览器上允许横向滑动。 为了其他用户的利益,在一些浏览器上禁用一个小功能并不可耻。
似乎无法禁用此功能,因此作为一种解决方法,我发现页面两侧的 24 像素死区似乎足以阻止无意导航。
这是我的 CSS:
body {
position: fixed;
top: 0;
bottom: 0;
left: 24px;
right: 24px;
background-color: #ccc;
}
制作身体position: fixed
还可以阻止 Safari 执行烦人的过度滚动/弹跳效果。
如果有导航历史记录,则可以使用滑动手势进行导航。 向左滑动是“返回到我的导航历史记录中的上一页”。
因此,如果您的应用程序不需要导航历史记录,例如对于单屏游戏可能完全有效,那么您可以通过删除导航历史记录来防止滑动问题。
例如,我有一个仅使用内存历史记录的单页应用程序,我不与浏览器(历史记录/URL)同步。 因此,“刷卡”无处可去“解决”这个问题。
也就是说,这是一种变通方法,其局限性可能不足以满足您的情况。 (URL共享是互联网中的基本事情)
似乎浏览器供应商的使命是让 Web 开发人员的生活因诸如此类的愚蠢事情而悲惨。
在<body>
标签中试试这个:
onload='ontouchmove()="return(function(event) { event.preventDefault(); event.stopPropagation(); return(false); } );"'
我想不让 IOS 知道移动可能会有一些副作用,但对于 SPW 来说,它们可能很轻微。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.