【发布时间】:2017-12-25 04:16:21
【问题描述】:
我注意到 iOS 10 中带有 CSS scroll-snap 属性的一个奇怪错误。
这是我的 CSS:
#springBoard{
height: 100%;
width: 100%;
font-size: 0px;
white-space: nowrap;
overflow: scroll;
-webkit-overflow-scrolling: touch;
-webkit-scroll-snap-type: mandatory;
-webkit-scroll-snap-points-x: repeat(100%);
}
section{
display: inline-block;
width: 100%;
height: 100%;
vertical-align: top;
font-size: 16px;
}
如果我以编程方式滚动到一个捕捉点,然后更改滚动捕捉容器内的内容,则导航会捕捉回第一个捕捉点。
// Programatically scroll the scroll-snap container
$("#springBoard")[0].scrollLeft = 320
这似乎与我触发滚动的方式无关。所有这些滚动方法都会产生相同的结果:
$("#springBoard")[0].scrollLeft = 320
$("#springBoard").animate({scrollLeft: 320}, 1)
$("#springBoard > section:eq(1)")[0].scrollIntoView()
window.location.hash = "sectionId"
- 手动滚动时不会出现该错误(请参阅下面的@maxime 评论)。
- 它从 iOS 10.3.2 版本开始存在。
- 不知道 iOS 11 是否已修复。
我花了几天时间试图解决这个问题,但到目前为止没有成功。
这是我的导航的精简示例: Codepen Demostupid 错误的方法吗?
【问题讨论】:
-
如果我导航然后点击
Change Content按钮,它会停留在同一个快照点。只有当我在没有进行任何滚动的情况下单击按钮时才会出现错误。 -
您是否尝试过以编程方式滚动页面?
window.scrollTo(0, 0); //or some variant -
感谢您的建议,我尝试滚动窗口但没有解决问题。
-
这个功能仍然是实验性的。在 Mac OSX 上的 Safari 中,当您在溢出框webkit.org/demos/scroll-snap 垂直对齐滚动时,它会继续滚动页面@ Chrome 甚至还不支持它。到目前为止,最好使用 JS。
标签: javascript ios css scroll-snap-points