使用 Javascript 模拟原生滚动

Posted

技术标签:

【中文标题】使用 Javascript 模拟原生滚动【英文标题】:Mimic native scrolling using Javascript 【发布时间】:2011-07-24 12:54:56 【问题描述】:

哪些 javascript 库可用于模拟 ios 设备(主要是 iPad)上的本机滚动行为,即使是基于 jQuery 的库也可以。

在你说之前,我知道最常见的是 iScroll https://github.com/cubiq/iscroll 但我想知道更多...

请尽可能多地列出。谢谢你。

【问题讨论】:

【参考方案1】:

所以 IOS 5 webkit 现在具有原生滚动功能。但它仍然存在一些问题,特别是如果你想获得一种“应用程序”的感觉。

使用这个 CSS 激活原生滚动。

.scrollme 
   -webkit-overflow-scrolling: touch;
   overflow:auto;

问题是,如果你在 div 已经在其容器的“顶部”时向下拖动,你最终会导致整个 html 文档滚动弹跳,这可能会在你不想要的时候暴露浏览器 chrome到。但是,有一个纯 CSS 的解决方法(没有 javascript)。您可以使用一组 3 个嵌套 div。将外部 2 设置为“scrolling:touch”,您可以获得相当“原生”的感觉。

此处的示例代码:https://gist.github.com/1372229

与“position:fixed”属性一起,这对简化事情大有帮助。

【讨论】:

【参考方案2】:

Scrollability by Joe Hewitt 是一个最近开发的实现,它很好地模仿了 iOS 设备上的原生滚动。然而,他自己承认这是一个“进行中的工作”,还没有准备好用于生产。

此外,iOS 5 将通过-webkit-overflow-scrolling: touch CSS 属性和值直接支持原生滚动。将其与元素上的overflow: scroll 一起设置将使滚动的行为类似于在本机应用程序中滚动面板:一根手指,本机风格的动量和行为。基本上所有需要大量 JavaScript 的东西都可以用两个 CSS 属性替换。

缺点是,由于它仅在 iOS 测试版中,您仍然必须使用脚本作为后备,直到 iOS 5 成为主流(不仅仅是发布),android 采用它(并且发布成为主流)等。我们还需要一段时间的后备。

您可以在FunctionSource 和this blog 获得更多详细信息。同样,这在今天还没有用,但会在接下来的 6 到 12 个月内有用(对于其他平台可能更长)。

【讨论】:

非常感谢您的回复.. 不过只有一个问题....当您说 iOS 5 将通过 -webkit-overflow-scrolling: touch CSS 属性提供直接的本机滚动支持时... ..这到底是什么意思?这是否意味着我们可以将该属性应用于任何元素,例如一个固定高度的 div...如果是的话,我们无论如何都会得到固定高度的 div 以在带有 2 根手指的 IOS 设备上滚动...您能否详细说明那部分...因为我认为 IOS5 不是很远。 .. 但可滚动性使页面“弹跳”(在 safari 移动设备上,您可以在 web 视图下看到灰色的东西)。这似乎不是原生的【参考方案3】:

这是一个有趣的 Touch 和 Touch-Scroll Javascript 库列表:

https://github.com/bebraw/jswiki/wiki/Touch

【讨论】:

以上是关于使用 Javascript 模拟原生滚动的主要内容,如果未能解决你的问题,请参考以下文章

javascript:用原生js模拟贪吃蛇游戏练习

原生Javascript使用fetch发起请求_模拟get|post|文件流下载等

js原生创建模拟事件和自定义事件的方法

物理学的 H5 应用:模拟惯性滑动

全站最简单 “数据滚动可视化大屏” JS基础拿来即用

js原生滚动与使用插件better-scroll不起作用原因