惯性滚动时如何同步两个元素的滚动偏移

2024-01-03

我需要使一个元素的滚动偏移量与另一个元素(实际上是窗口)保持同步,但在 Mobile Safari (iPad) 上滚动的惯性“滚动”阶段,我遇到了麻烦。

我有几个 divposition:fixed; overflow:hidden我需要保持它们的滚动偏移与窗口的滚动偏移同步(意味着整个主体滚动。)通常我会像这样编码(jQuery):

var $win = $(window),
    $div1 = $(...)

$win.scroll(function() { 
    $div1.scrollTop($win.scrollTop())
})

但是在iPad上测试界面时,我注意到div在触摸阶段(当你用手指拖动虚拟页面时)和惯性阶段(当你放手并且页面减慢速度时)都没有更新。一个停留。

我通过注册处理程序来解决拖动阶段的问题touchmove事件以及scroll one.

但我找不到解决惯性阶段问题的方法。 div 保持静止(并且慢慢地与页面的其余部分不同步),直到惯性运动完全停止,此时滚动事件最终被触发并且它跳到适当的位置。

这是一个工作演示。 http://www.gruppo4.com/scrolling_demo/demo.html

尝试在iPad上滚动看看是否存在“惯性滚动”问题。不幸的是,由于 iPad 的 iframe 滚动行为很奇怪,我无法让它在 jsFiddle 上工作。

如果我可以在该阶段运行轮询,我就可以在两个元素之间保持表面上的同步。我尝试过setTimeout, setInterval, and requestAnimationFrame,但它们都不会在惯性滚动阶段触发。似乎所有 Javascript 都会在该阶段停止。

问题:

  • 在惯性滚动阶段是否触发了任何触摸或滚动事件?
  • 有没有any在该阶段运行 Javascript 回调的方法?
  • 有没有办法使用CSS或JS以外的其他技术来同步两个元素(X或Y,而不是两者)的滚动偏移量?

老醉水手比我先提出建议iScroll http://cubiq.org/iscroll-4.

不幸的是,开箱即用的 iScroll 只是复制了与本机惯性滚动相同的问题 - 在惯性阶段没有事件处理。

这是您的演示版本,其中包含猴子修补的 iScroll,以添加即使在惯性阶段也会触发的自定义事件:https://dl.dropbox.com/u/15943645/scrollingdemo.html https://dl.dropbox.com/u/15943645/scrollingdemo.html

在我的第二代 iPad 上运行良好。

JS:

// Disable touch events
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);

// Patch iScroll for position change custom event
iScroll.prototype._oldPos = iScroll.prototype._pos;
iScroll.prototype._pos = function(x, y) {
    this._oldPos(x, y);
    if (this.options.onPositionChange) this.options.onPositionChange.call(this);
}

$(function() {
    var $win = $(window),
        $div_cols = $('#cols'),
        $div_rows = $('#rows'),
        $div_body = $('#body')

    // attach scrolling sync handler and execute it once
    function sync_scroll(e) {
        $div_cols.scrollLeft(0 - $div_body.position().left);
        $div_rows.scrollTop(0 - $div_body.position().top);

    }           

    // initialize iScroll on wrapper div, with position change handler
    var myScroll = new iScroll('iscroll_wrapper', {
        bounce: false,
        onPositionChange: sync_scroll
    });
})

CSS:

#iscroll_wrapper {
    position:absolute;
    z-index: 1;
    left: 168px; 
    top:77px; 
    bottom:0px; 
    right:0;
    overflow:auto;
}

#body {
    position:absolute;
    z-index: 1;
    width: 2046px; 
    height: 3376px;

}

请注意,只有主体响应触摸事件,但您可以将该技术扩展到行和列 div 以获得相反的关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

惯性滚动时如何同步两个元素的滚动偏移 的相关文章

  • iPad应用程序必须支持横向和纵向吗?

    iPad 应用程序是否必须支持纵向和横向才能被 App Store 接受 编辑 我的应用程序是一个商业应用程序 销售亚马逊等产品 您必须至少支持一种方向的两种类型 纵向和纵向颠倒和 或横向左 右 会尽快拉起链接 http developer
  • 如何防止 Safari 滚动溢出:隐藏的 iframe?

    使用 Safari 您可以通过设置 style overflow hide 来禁用大多数 iframe 滚动 在 iframe 上 但是 如果您单击 iframe 并移动鼠标 内容无论如何都会滚动 Example 滚动内容 html
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • iPhone 点击时使 div 变暗

    当您的 div 附加了点击处理程序时 当点击该 div 时 iPhone 会使该 div 变暗 作为点击指示器 示例 在移动 Safari 上查看http jsbin com awejo3 4 http jsbin com awejo3 4
  • 奇怪的行为与缓存。清单/离线使用网络应用程序保存到ipad ios6的主屏幕

    我刚刚在装有新 iOS 6 的 iPad 上发现了一些奇怪的行为 我正在测试一个用于离线使用的网络应用程序 Web 应用程序只不过是一个带有缓存清单的静态网站 因此没有使用像 sencha touch 这样的特殊框架或像 phnoegap
  • 背景大小:封面在视网膜显示屏上看起来像素化

    可以看到我正在开发的网站here http ourcityourstory com dev 如果你查看 iPad 3 或 iPhone 4 上的 关于 或 联系 部分 背景看起来全都是疯狂的像素化 我有background size set
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • UISplitViewController - 推送模态视图

    使用 UISplitViewController 时推送模态视图的最佳实践是什么 您会从 RootViewController DetailViewController 还是直接从应用程序委托推送 理想情况下 我想要实现的功能是在基于某些条
  • Core Animation 是否为 iBook 样式卷页过渡提供公共 API?

    Core Animation 是否为 iBook 样式卷页过渡提供公共 API 我见过this http blog steventroughtonsmith com 2010 02 apples ibooks dynamic page cu
  • ipad safari 中的高分辨率 PNG 文件

    我有一些 asp net 站点 显示从高分辨率 tiff 文件转换而来的 png 图像 图像通过简单的 img 标签显示 问题是 wneh png 的分辨率很大 它在 ipad 的 safari 浏览器中无法正确显示 但大多数 png 文件
  • 如何在 iOS 上捕获的视频中添加水印[重复]

    这个问题在这里已经有答案了 我想知道是否有人可以告诉我如何实现这一目标 如果一直在考虑几个解决方案 从捕获的视频创建单独的图像 然后将它们合并到每个图像中 然后创建一个新的 AVAsset 听起来有点复杂 您不觉得吗 合并2个视频 一个是透
  • 从哪里开始使用适用于 Retina 显示屏的 OpenGL 绘制程序

    我知道由于这里提到的错误 我无法将 GLPainter 示例从苹果适应到视网膜 在 Retina iPad 上显示全屏 CAEAGLLayer 时出现问题 https stackoverflow com questions 9757052
  • 使用 MPMoviePlayerViewController 时的 iPad 旋转错误

    问题摘要 使用 MPMoviePlayerViewController 播放视频时更改 iPad 设备或模拟器的方向会导致视频播放器关闭时旋转状态不一致 这是 iPad SDK 3 2 中的一个已知错误 记录于http www openra
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 通用cocos2d游戏支持iPad3

    通用应用程序中的 ipad 和 ipad HD 版本的图像资源如何命名 当支持 iPhone 的普通图像和高清图像时 我们使用图片名称 png 图片名称 hd png 但如果我制作一个通用的 我假设我必须重命名图像并使用图片名称iPad p
  • 如何在 React 中使用 tailwindcss 的平滑滚动?

    我使用创建了一个单页网站tailwindcss and React 在原型中我使用tailwindcss类 scroll smooth 并且它有效 在React scroll smooth 类不起作用 但原因是什么 https tailwi
  • Mobile Safari 中的 React PWA 图像上传会破坏应用程序吗?

    我们很惊讶在网上没有发现任何提及此问题的信息 因此我们在此发帖希望能找到解决方案 当我们在使用 iPhone 进行移动 Safari 浏览时遇到此问题 运行下面 2 个易于遵循的测试 一个有效 一个无效 链接在这里https pwa rea
  • Angularjs:当滚动到达div中滚动条的底部时如何触发事件?

    我试图在滚动条到达末尾时触发一个事件 我找到了这个这个例子 http jsfiddle net ADukg 4831 这是我的代码 问题是它根本不调用 load more 控制台语句的值为 848 899 in scroll 881 899
  • 自定义 UITabBar 背景图像在 iOS 5 及更高版本中不起作用

    我有一段简单的代码 可以在 tabBar 上放置背景图像 UIImageView imageView UIImageView alloc initWithImage UIImage imageNamed tabBG png self tab

随机推荐

  • 测试 ClickOnce 应用程序

    您将使用什么方法在多个用户中测试 ClickOnce 应用程序的新版本 与当前版本并排 是否有任何最佳实践 特别是当应用程序依赖于不同服务器来实现 SQL Web 服务等的实时 测试版本时 我们使用内部 DNS 来设置http applic
  • 学习 Haskell 是为了学习 Scala

    我读过一些问题 例如 Scala vs Haskell 讨论两种语言的优点或学习哪种语言 但我已经知道我想学习 Scala 我在大学时是一名Java程序员 现在主要使用PHP 我想学习 Scala 因为它看起来像是个人项目中 Java 的改
  • 抑制 VSCode 中的 ESLint 警告

    我正在使用 ESLint扩大 https marketplace visualstudio com items itemName dbaeumer vscode eslint在 VSCode 中格式化并检查我的 JavaScript 代码
  • 将我的应用程序添加到 tvOS 应用程序设置屏幕

    How do you add app settings to tvOS like you do in iOS I assume that just like iOS the screen below you can add the sett
  • 当滚动离开视图 android 时,项目动画在 recyclerview 中停止

    我有一个 Recyclerview 我正在为单个列表项内的视图设置动画 但是当我滚动 recyclerview 时 动画停止 这是因为 recyclerview 会从其视图中删除项目 因此当我们向后滚动时 它会将其取回 但现在我希望该动画继
  • 垂直对齐字体很棒的图标与
  • 内的文本
  • 我有一个使用很棒的字体的列表 因此它的类是fa ul ul class fa ul li class dept i class fa li fa fa stop i span Management span li li class dept
  • 在Linux中,为什么所有进程都有一个全局的/dev/stdin文件?

    不同进程的标准输入不应该是唯一的吗 如果是这样 标准输入文件的路径不应该是这样的 dev pid stdin而不是全局的 dev stdin 有人对此有想法吗 dev stdin是独一无二的 因为 它是一个符号链接 proc self fd
  • MFMessageComposeViewController 不工作

    我有一种简单的方法 可以获取一个参数 然后发送一条消息 它不起作用 Code void sendSMS NSString text MFMessageComposeViewController viewController MFMessag
  • 用于 Web 应用程序的 GetEntryAssembly

    Assembly GetEntryAssembly 不适用于网络应用程序 但是 我真的需要这样的东西 我使用一些在 Web 和非 Web 应用程序中使用的深度嵌套代码 我当前的解决方案是浏览 StackTrace 以查找第一个调用的程序集
  • 在 SQLite 数据库中存储 XML/HTML 文件 - 可能吗?

    是否可以直接将 XML HTML 文件存储在 SQLite 数据库中 我正在用 python 编写一个程序 该程序应该解析 XML HTML 文件并将值存储在数据库中 然而 XML HTML 文件中的字段可能会有所不同 我认为将整个 XML
  • 如何在 SmartOS 上使用 HotSpot DTrace 探针?

    在 Mac OS X 上 我可以通过运行以下命令找到运行 Java 程序的 HotSpot 探针 cody mello ashur 1 sudo dtrace ln hotspot Password Invalid connection c
  • 使用数组查询sqlite数据库android

    我如何使用字符串数组来查询 sqlite 数据库 我不断收到异常 SQliteException 绑定或列索引超出范围 String names new String values size values is an Arraylist S
  • 为什么 EF 返回代理类而不是实际实体?

    当我想要实际的实体类时 我在实体框架返回代理时遇到问题 我第一次运行代码时 一切都运行正常 没有代理 但之后的每次迭代 我的一个 DbSet 总是返回代理而不是实际类型 我在每次迭代后都会处理上下文 所以我不明白为什么第一次它有效 而之后每
  • 如何使 Win32/MFC 线程同步循环?

    我是 Windows 中多线程的新手 所以这可能是一个微不足道的问题 确保线程按步执行循环的最简单方法是什么 我尝试传递一个共享数组Events 到所有线程并使用WaitForMultipleObjects在循环结束时同步它们 但这会在一个
  • 对reportlab heisenbug 进行故障排除

    使用Django 1 4 Python 2 7 reportlab 开源版本 生成pdf 到目前为止 一切都进展顺利 以前的 pdf 生成 如 http 请求返回 下载生成的 pdf 文件 是在 Django 1 3 上进行的 并且不向公众
  • 如何使用 Rails 重定向到外部网站?

    我希望当鼠标悬停在链接上时 您会看到该链接看起来像这样 http www website com redirect to linkID2 http www website com redirct to linkID2 也许不完全一样 但尝试
  • 将 CGGradient 添加为 UILabel 的子图层会隐藏标签的文本

    我想添加渐变作为标签的背景 我使用以下代码来实现这一目标 但问题是 虽然标签上出现渐变颜色 但文本不可见 请帮忙 lblPatientDetail text PatientsDetails lblPatientDetail textColo
  • 在 Spring Security Java Config 中创建多个 HTTP 部分

    使用 Spring Security XML 配置 您可以定义多个 HTTP 元素来为应用程序的不同部分指定不同的访问规则 中给出的示例8 6 高级命名空间配置 http docs spring io spring security sit
  • 从外部按钮清除与 Angular Bootstrap UI 选项卡集中的文本区域关联的 ng-model

    我用过 Angular Bootstrap uitabset创建两个选项卡并且两个选项卡都有textareas与一个相关联ng model 我在外面有一个清晰的按钮tabset我想清除ng model of the textArea当用户按
  • 惯性滚动时如何同步两个元素的滚动偏移

    我需要使一个元素的滚动偏移量与另一个元素 实际上是窗口 保持同步 但在 Mobile Safari iPad 上滚动的惯性 滚动 阶段 我遇到了麻烦 我有几个 divposition fixed overflow hidden我需要保持它们