iOS Safari – 如何禁用过度滚动但允许可滚动 div 正常滚动?

2024-04-15

我正在开发一个基于 iPad 的网络应用程序,需要防止过度滚动,使其看起来不像网页。我目前正在使用它来冻结视口并禁用过度滚动:

document.body.addEventListener('touchmove',function(e){
      e.preventDefault();
  });

这对于禁用过度滚动非常有用,但我的应用程序有几个可滚动的 div,并且上面的代码阻止它们滚动.

我只针对 iOS 5 及更高版本,因此我避免了像 iScroll 这样的黑客解决方案。相反,我将这个 CSS 用于我的可滚动 div:

.scrollable {
    -webkit-overflow-scrolling: touch;
    overflow-y:auto;
}

这无需文档过度滚动脚本即可工作,但不能解决 div 滚动问题。

没有 jQuery 插件,有什么方法可以使用过度滚动修复但免除我的 $('.scrollable') div 吗?

EDIT:

我找到了一个不错的解决方案:

 // Disable overscroll / viewport moving on everything but scrollable divs
 $('body').on('touchmove', function (e) {
         if (!$('.scrollable').has($(e.target)).length) e.preventDefault();
 });

当您滚动经过 div 的开头或结尾时,视口仍然会移动。我也想找到一种方法来禁用它。


这解决了当您滚动超过 div 的开头或结尾时的问题

var selScrollable = '.scrollable';
// Uses document because document will be topmost level in bubbling
$(document).on('touchmove',function(e){
  e.preventDefault();
});
// Uses body because jQuery on events are called off of the element they are
// added to, so bubbling would not work if we used document instead.
$('body').on('touchstart', selScrollable, function(e) {
  if (e.currentTarget.scrollTop === 0) {
    e.currentTarget.scrollTop = 1;
  } else if (e.currentTarget.scrollHeight === e.currentTarget.scrollTop + e.currentTarget.offsetHeight) {
    e.currentTarget.scrollTop -= 1;
  }
});
// Stops preventDefault from being called on document if it sees a scrollable div
$('body').on('touchmove', selScrollable, function(e) {
  e.stopPropagation();
});

请注意,如果您想在 div 没有溢出时阻止整个页面滚动,则此方法将不起作用。要阻止这种情况,请使用以下事件处理程序而不是上面的事件处理程序(改编自这个问题 https://stackoverflow.com/a/16446081/40352):

$('body').on('touchmove', selScrollable, function(e) {
    // Only block default if internal div contents are large enough to scroll
    // Warning: scrollHeight support is not universal. (https://stackoverflow.com/a/15033226/40352)
    if($(this)[0].scrollHeight > $(this).innerHeight()) {
        e.stopPropagation();
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS Safari – 如何禁用过度滚动但允许可滚动 div 正常滚动? 的相关文章

  • 看起来像 iOS7 向左导航 V 形的 Unicode 字符

    最接近 iOS7 向后指向导航栏 V 形的大小 与大写字母一样大或大于大写字母 和形状的 Unicode 字符是什么 我正在寻找一种使用 unicode 字符来模拟通常没有 返回 导航的视图的 向后导航 V 形的方法 常规的 对于锐角比 U
  • ios 将 alpha 通道视频叠加在另一个视频上

    我一直在尝试创建一个视频模板 该模板使用 alpha 通道视频叠加在 mp4 视频和图像上 这就是我需要创建视频的方式http viewptch ptchcdn com rendered 52b28a9f8d4f980f3a3f99c3 c
  • CALayer 的 display/drawRect 方法中到底应该发生什么?

    如果有的话 这些方法中哪一个适合 更改 CATextLayer 的文本 将不同的图像加载到 CAImageLayer 中 告诉子层自我更新 老兄 我可能喝醉了 但是没有drawRect方法CAlayers 我想你可以使用drawInCont
  • iOS:获取 iPhone 密码以生成用于加密的对称密钥

    我正在开发一个 iOS 应用程序 该应用程序分发到所有用密码锁定的设备 有没有办法获取设备密码 或其某种形式 来动态生成对称密钥 例如使用 PBKDF2 来加密 解密数据 否 没有 API 可以确定是否设置了设备密码或获取密码 如果已设置
  • Blueimp 文件上传:上传前从文件列表中删除文件

    在提交要上传的表单之前 如何从 Blueimp 插件的选定文件列表中删除文件 我试过这个答案 https stackoverflow com questions 18267958 how to remove file from the qu
  • UITableViewCell - 理解“可重用”

    UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath static NSString reuseIdentif
  • iOS Objective-C 对象:何时使用release,何时不使用它

    我在 iOS 下 正在使用 delphi Tokyo 进行开发 这是我的代码 aUIImage TUIImage Wrap TUIImage alloc initWithCGImage aCGImageRef try aData TNSDa
  • jQuery Mobile 和页眉/页脚问题

    使用 jQuery Mobile 有人知道为什么当使用 changePage 函数更改到内容超出视口高度的页面时 页面的页眉会消失而页脚会出现在内容顶部的视图中吗 仅当您使用过渡来更改页面时才会发生这种情况 如果您在没有过渡的情况下更改页面
  • 如何获取默认的iOS浏览器名称?

    Stack Overflow 应用程序检测到我越狱设置的默认浏览器 Chrome 的名称 我怎样才能在 Objective C 和 Swift 中实现同样的目标 只是名称 不是 ActivityView 代码 Example Update
  • “块样式”单选按钮适用于除 iPad 之外的所有设备

    我有一组单选按钮 并对它们进行了样式设置 以便它们显示 块 以便它们看起来像按钮 还隐藏了单选按钮本身 这在台式机和 Android 平板电脑上的 Chrome 和 Firefox 中效果很好 但在 iPad 上不起作用 在这里查看 htt
  • UICollectionView 垂直居中

    我有一个UICollectionView大小的对象 320 500 我需要一个来创建UICollectionView以这样的方式 内容垂直居中 意味着如果内容的总大小为 100 100 则单元格应在矩形 0 200 320 300 中绘制自
  • 如何确定输入的模式是“Int,VarChar,Date,Time ...”等

    我有一个下拉菜单 其中包含DataType 和一个文本框 这是用于输入的Regex Pattern 如果我进入 test 在文本框中 或从下拉菜单中选择Int 如果在文本框中输入 则其模式是错误的 0 9 那么它的correct patte
  • 元视口标签似乎被完全忽略或没有效果

    我把这个标签放在了头部一个网页 http www belovedobjects de 由于某种原因 它在我的 iPhone 上似乎被忽略了 甚至添加了user scalable no没有影响 我尝试了许多宽度 初始比例等值 似乎没有任何效果
  • 如何将NSDate转换为unix时间戳iphone sdk?

    如何转换NSDate转换为 Unix 时间戳 我读过很多相反的帖子 但我没有找到与我的问题相关的任何内容 我相信这是您正在寻找的 NSDate 选择器 NSTimeInterval timeIntervalSince1970
  • 使用 use_frameworks 签名错误!和独特的配置文件

    我将最初讨论中的最后一篇文章粘贴到此处 https github com CocoaPods CocoaPods issues 4331 https github com CocoaPods CocoaPods issues 4331 这个
  • 在视口中保留绝对定位的元素(jquery)

    我现在正在开发一个带有很多工具提示的网站 我想确保工具提示始终完全显示在视口中 我知道有工具提示插件 但它们对我不起作用 因为工具提示是通过 css 完成的 而且我不能全部更改 任何想要获得工具提示的元素都会被赋予一个position re
  • 将 CIFilter 与 AVFoundation 结合使用 (iOS)

    我正在尝试将滤镜应用于在 iOS 上使用 AVFoundation 创建的视频合成 滤镜可以是模糊 像素化 棕褐色等 我需要实时应用效果并能够将复合视频渲染到磁盘 但我很高兴从其中之一开始 不幸的是 我似乎无法弄清楚这一点 这是我能做的 我
  • iOS 模拟器无法正确刷新

    我尝试模拟一个在 Xcode 9 中创建的非常非常简单的应用程序 我尝试在装有 iOS 11 2 的 iPhone6 的 iOS 模拟器中模拟它 我还测试了其他设备 结果相同 在真实设备上 该应用程序可以按预期运行 但在模拟器上却没有 我希
  • 更改 NSManagedObject 属性而不触发委托方法?

    有什么方法 或技巧 可以修改NSManagedObject目前由一名代表持有NSFetchedResultsController不触发didChangeObject and controllerWillChangeContent 委托方法
  • 多线程:只有在执行完其他方法后才调用执行方法

    我正在尝试根据要求异步处理方法 一旦第一个方法完成 只有第二个方法应该开始执行 问题是第一个方法本身具有在后台线程上运行的代码 我尝试了dispatch semaphore wait 但这也不起作用 dispatch queue t que

随机推荐