Javascript 在iPad Safari中防止网页之间滑动

Javascript 在iPad Safari中防止网页之间滑动,javascript,html,ios,css,safari,Javascript,Html,Ios,Css,Safari,从我的iPad Safari浏览器的左右边缘滑动,在当前打开的网页之间移动。有什么办法可以预防吗 我曾尝试在页面边缘添加touchstart和touchmove处理程序,以stopPropagation和preventDefault,但它们似乎没有效果,touch actionCSS 2014年提出了一个类似的问题,回答为否定: 2018年是否有一个工作周期?苹果在iOS9之后提供了这些指南 该指南允许您禁用 滚动 function touchMove(event) { // Preven

从我的iPad Safari浏览器的左右边缘滑动,在当前打开的网页之间移动。有什么办法可以预防吗

我曾尝试在页面边缘添加
touchstart
touchmove
处理程序,以
stopPropagation
preventDefault
,但它们似乎没有效果,
touch action
CSS

2014年提出了一个类似的问题,回答为否定:


2018年是否有一个工作周期?

苹果在iOS9之后提供了这些指南

该指南允许您禁用

  • 滚动

    function touchMove(event) {
      // Prevent scrolling on this element
      event.preventDefault();
      ...
    }
    
  • 收缩和缩放

    function gestureChange(event) {
      // Disable browser zoom
      event.preventDefault();
      ...
    }
    
  • 您可以按如下方式识别刷卡手势:

  • 如果收到包含一个手势的touchstart事件,则开始手势 目标接触
  • 如果在任何时候收到事件,则中止手势 触摸次数>1次
  • 如果收到touchmove事件,则继续手势 主要是在x方向
  • 如果收到触摸移动,则中止手势 事件主要发生在y方向
  • 如果收到touchend,则结束手势 事件
  • 完整的指南是海报

    如果你需要更多的帮助,请告诉我

    尼廷,
    似乎没有办法禁用此功能,因此作为一个解决方案,我发现页面两侧的24px死区似乎足以阻止无意导航

    这是我的CSS:

    body {
      position: fixed;
      top: 0;
      bottom: 0;
      left: 24px;
      right: 24px;
      background-color: #ccc;
    }
    
    将身体置于
    位置:固定
    也会停止Safari进行恼人的翻滚/弹跳效果。

    标签中尝试此操作:

    onload='ontouchmove()="return(function(event) { event.preventDefault(); event.stopPropagation(); return(false); } );"'
    

    我想,不让IOS知道移动可能会有一些副作用,但对于SPW来说,这些副作用可能很小。

    你不能,这在IOS早期就是个问题。他们反复使用强大的web应用程序功能,如服务人员和webgl

    您所能做的最好的事情就是您应该为每个浏览器做的事情,为每个浏览器使用功能检测提供最佳体验。让所有网站在每个浏览器上看起来都一样的日子已经一去不复返了


    如果需要,可以使用三明治,允许在支持三明治的浏览器上进行侧扫。为了您的其他用户的利益,在一些浏览器上禁用一个小功能并不丢脸。

    如果有导航历史记录,则可以使用滑动手势进行导航。向左滑动是“返回到我的导航历史记录中的上一页”

    因此,如果您的应用程序不需要导航历史记录(例如,它可能对单屏幕游戏完全有效),则您可以通过删除导航历史记录来防止刷卡问题

    例如,我有一个只在内存中使用历史记录的单页应用程序,我不与浏览器同步(历史记录/URL)。因此,“刷卡”无处可去,“修复”这个问题

    这就是说,这是一个有其局限性的变通办法,可能不适合您的情况。(URL共享是Internet中的一项基本内容)


    浏览器供应商的任务似乎是让web开发人员的生活因为那些愚蠢的事情而痛苦。

    在iOS 13.4+中,您现在可以
    的“touchstart”

    假设我们在页面上有一个
    ,它跨越了视口的整个宽度,我们希望防止在该元素上滑动导航

    const-element=document.querySelector('.block-swipe-nav');
    元素。addEventListener('touchstart',(e)=>{
    //不在视图边缘附近,请退出
    如果(e.pageX>10&&e.pageX

    我写了一些附加信息。

    我不建议这样做。禁用浏览器中的基本导航操作会让用户感到困惑。我的应用程序是一个单页应用程序,允许用户在屏幕上移动卡片。让用户困惑的是,如果他们开始移动靠近屏幕一侧的卡片,整个页面就会移动。Android Chrome通过只允许在Chrome栏上进行导航滑动来解决这个问题。解决方案是在屏幕中央为卡片提供一个所谓的安全区域,在那里它们可以自由移动。这是一个解决方法,但对用户来说不是很直观/愉快。我也有一个拆分屏幕模式,其中一个拆分器可以拖动,也可以停靠在屏幕的任意一侧。除了iOS Safari,它在任何地方都能很好地工作。一旦停靠,它就无法移动,因为屏幕边缘的触摸事件丢失,任何移动它的尝试都会导致在网页之间滑动。我已经知道如何从触摸事件中解释滑动手势。问题在于,在屏幕边缘,浏览器的行为是不同的。它在页面之间导航,我没有找到任何方法来阻止它@ᴇʟᴇvᴀтᴇ ... 你可能找不到一种不太老套的方法。似乎是一个本机浏览器功能,您作为一个web开发人员无法控制。。。这就是这个浏览器的工作原理。您所能做的最好的事情就是向用户提供有关该行为的警告消息。我想你的手打结了,是的,似乎没有办法阻止它。我想知道苹果是否有意做这种事情,让网络应用更难与应用商店原生应用竞争。有趣的黑客!这在iOS 13上不起作用。仍然可以从屏幕左侧滑动以触发反向导航。是的,似乎没有办法阻止导航。这个工作循环的目的是让用户更清楚地看到页面侧面的区域不是web应用程序的一部分。这听起来很有趣,但我不完全理解如何实现它。你能解释一下如何“删除导航历史记录”吗?在我的iPad上,滑动在打开的标签之间进行(我无法控制)。在我说之前,你的应用程序是否在某个地方在线查看?不,我从来没有在世界上发布过。(或者,至少,