CSS 滚动捕捉点在 iOS 9.1 Safari 中不起作用

Posted

技术标签:

【中文标题】CSS 滚动捕捉点在 iOS 9.1 Safari 中不起作用【英文标题】:CSS Scroll snap point not working in iOS 9.1 safari 【发布时间】:2016-01-24 21:19:23 【问题描述】:

我刚刚将我的 ipad mini 更新到 ios 9.1,根据 Can I use 我应该能够在我的设备上的 safari 中使用 css 快照点。网上有快照点演示,但我自己写了一个(为什么不:)DEMO。在该演示中,您可以水平滚动。

html

<ol>
        <li class="a"></il>
        <li class="b"></il>
        ...
</ol>

样式:

ol 
    list-style-type: none;

    white-space: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    white-space: nowrap;

    scroll-snap-type: mandatory;
    scroll-snap-points-x: repeat(100%);
    scroll-behavior: smooth;

无论如何,我的演示可以在我的笔记本电脑上的 FF 和 Safari 中运行,但在我的 iPad 上却不行。所以问题是,Can I Use 错了还是我做错了什么?

【问题讨论】:

【参考方案1】:

我能够通过添加-webkit-overflow-scrolling: touch; 使其工作 看到这个更新的小提琴http://jsfiddle.net/hpjtqewn/2/

该按钮不起作用,但是当我用手指滚动时,它会捕捉到正确的捕捉点,这在我桌面上的 safari 中也是如此,当我使用触摸板滚动时它会起作用。普通鼠标不起作用,点击按钮不起作用,但这可能与您通过jquery使用.scrollTo的方式有关。

【讨论】:

【参考方案2】:

您可以为您的 ol 添加父 div 并使用 -webkit-overflow-scrolling:touch。这是对 iOS 上滚动问题的修复。

<div style="overflow:auto;-webkit-overflow-scrolling:touch">
    <ol>
      <li class="a"></il>
      <li class="b"></il>
      ...
    </ol>
</div>

【讨论】:

【参考方案3】:

我发现 irnmn 的回答很有帮助,但深入到项目中它又停止工作了。经过几个小时的调查,我发现添加

overflow: hidden;

到子元素会在 Safari(桌面和移动设备)上终止快速滚动。

【讨论】:

【参考方案4】:

在撰写本文时,要在 Safari 中进行全屏滚动捕捉,滚动捕捉类型需要带有 body 标签:

body  
  scroll-snap-type: y mandatory;

而 Chrome 和 Firefox 要求它带有 html 标签:

html 
  scroll-snap-type: y mandatory;

这有点乱,但我不得不将它们都放在我的 css 文件中以实现跨平台兼容性。

【讨论】:

【参考方案5】:

我在一个项目中遇到了同样的问题,该项目在 iPad 上也无法按照您的建议执行。 但是,由于截止日期,我最终使用了这个超轻量级的小 jquery 插件,名为:

Snap-point

在这里试用演示:http://robspangler.com/git/jquery-snappoint/demo/demo.html

【讨论】:

我已经在台式机和 iPad 上尝试过演示,但如果我滚动,则没有太多捕捉。如果我滚动,我只会体验到正常的滚动行为。 我在 ipad 上试了一下,如果我滚动到它说要滚动到的区域,它确实会把我吸引到盒子顶部的断点。 嗯...你们使用的是哪个版本的 jquery?我正在使用谷歌提供的(v 1.8.2)

以上是关于CSS 滚动捕捉点在 iOS 9.1 Safari 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MobileSafari(iOS Safari):有没有办法防止水平/垂直滚动“捕捉”?

如何在 Chrome 中模拟 CSS 滚动捕捉点?

到达顶部时CSS滚动捕捉溢出身体

CSS 仅在 iOS 中滚动捕捉

Css 滚动捕捉错误 iOS 10

如何在 iOS Chrome 中使用 CSS 滚动捕捉 + 图片错误隐藏滚动条