从iPad的Safari浏览器的左右边缘轻扫,在当前打开的网页之间移动。有什么办法可以阻止吗?
我尝试在touchstart
和touchmove
的页面边缘添加stopPropagation
和preventDefault
个处理程序,但它们似乎没有任何效果,{ {1}} CSS。
2014年有人回答了一个类似的问题: iOS 7 - is there a way to disable the swipe back and forward functionality in Safari?
2018年现在有工作吗?
答案 0 :(得分:11)
在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();
});
我写了a short article on blocking swipe并附带了一些其他信息。
答案 1 :(得分:2)
Apple在iOS9之后提供了这些指南。
该指南可让您停用
滚动
function touchMove(event) {
// Prevent scrolling on this element
event.preventDefault();
...
}
捏合和缩放
function gestureChange(event) {
// Disable browser zoom
event.preventDefault();
...
}
您可以按如下方式识别滑动手势:
答案 2 :(得分:0)
似乎没有办法禁用此功能,所以作为一个workround我发现页面两侧的24px死区似乎足以阻止无意的导航。
这是我的CSS:
body {
position: fixed;
top: 0;
bottom: 0;
left: 24px;
right: 24px;
background-color: #ccc;
}
使身体position: fixed
也阻止Safari进行恼人的过度滚动/反弹效果。
答案 3 :(得分:0)
在<body>
标签中尝试:
onload='ontouchmove()="return(function(event) { event.preventDefault(); event.stopPropagation(); return(false); } );"'
我想象不让IOS知道移动可能会产生一些副作用,但对于SPW,它们可能很小。
答案 4 :(得分:0)
您不能,自iOS成立以来,这一直是一个问题。他们反复踩踏强大的Web应用功能,例如服务人员和webgl。
您能做的最好的事情就是对每个浏览器都应该做的事情,并为每个浏览器使用功能检测获得最佳的体验。使所有网站在每个浏览器上看起来都一样的日子已经一去不复返了。
如有必要,请使用三明治,并在支持它的浏览器上进行侧滑。为了让其他用户受益,禁用一些浏览器中的小功能并没有什么可耻的。
答案 5 :(得分:0)
如果有导航历史记录,则可以对滑动手势进行导航。向左滑动是“返回到我的导航历史记录中的上一页”。
因此,如果您的应用不需要导航历史记录(例如对于单个屏幕游戏可能完全有效),那么您可以通过删除导航历史记录来防止刷卡问题。 >
例如,我有一个仅使用内存历史记录的单页应用程序,我不与浏览器同步(历史记录/ URL)。因此,“刷卡”无处可寻并“解决”此问题。
也就是说,这是一种变通方法,其局限性可能不足以满足您的情况。 (URL共享是Internet的基本功能)
浏览器供应商的使命似乎是使诸如此类的愚蠢事情使Web开发人员的生活痛苦不堪。