【问题标题】:How to prevent overscrolling on iOS Safari?如何防止在 iOS Safari 上过度滚动?
【发布时间】:2019-10-31 22:50:21
【问题描述】:

在网页上,我有一个覆盖div,将通过单击特定按钮或图像来显示。为了避免在背景中滚动,我在显示叠加层时使用overflow: hidden 在正文中添加了一个 CSS 类。

在桌面浏览器上,这可以按预期工作,但在 iOS Safari(在我的情况下为 iOS 12.x)上,页面仍然在后台滚动。

有人知道解决办法吗?

$('.item-overlay, .item-overlay .morelink').on('click', function(e) {
  overlay_id = $(this).parent().parent().attr('id') + '-popup';
  page_link = $(this).attr('data-typolink');

  $('#' + overlay_id).css('display', 'flex').hide().fadeIn(300);
  $('#' + overlay_id).scrollTop(0);

  $('body').addClass('NoScrolling'); // Scrollen im Hintergrund vermeiden (durch Hinzufügen einer entspr. CSS-Klasse)
  $('body').on('touchmove', function(e) { // doesn't work
    e.preventDefault();
  });
});
body.NoScrolling {
  overflow: hidden;
}

【问题讨论】:

    标签: javascript jquery html css overscroll


    【解决方案1】:

    除了overflow,还要添加这些属性以防止正文滚动

    body.NoScrolling {
      overflow: hidden;
      position: fixed;
      height: 100vh;
    }
    

    【讨论】:

    • 感谢您的帮助!我也试过这个,它的工作原理是页面跳转到顶部。但是页面应该通过打开图层保持在原来的位置......
    • 这与 CSS 无关。为此,您还需要为父点击处理程序添加 e.preventDefault();
    • 我认为 CSS 与此有很大关系,因为固定元素将始终位于浏览器窗口的零坐标处。好吧,我可以用 javascript(scrollTop 等)重新定位元素,但这很痛苦......
    • 为什么在我们删除body 后要重新定位overflow
    • 您是否将网页托管在某个地方以便我可以尝试调试它?
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 2021-11-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2012-08-16
    相关资源
    最近更新 更多