专注于模式内的输入会导致 ios 向下滚动

2024-01-17

我遇到了模态内的输入并提出了问题。

当用户打开模式时,它会覆盖整个页面,并设置为高 z-index 和绝对位置。一旦用户专注于模式内的输入,在 iOS 上,整个页面就会由于某种原因向下滚动。

我认为 ios 的行为是将输入字段向上滚动一点,以便为键盘留出一些空间,并且由于我的模式的 html 位于页面底部,它会尝试滚动到该位置。

我努力了overflow-y: hidden在主体上并附加一个事件侦听器event.preventDefault() once touchmove发生时,当模态打开时,这些会阻止页面滚动,即使在 ios 用户上也无法滚动,但一旦他们专注于输入,所有这些似乎都会被忽略。


这个答案 https://stackoverflow.com/a/41049642/3492181为我工作。您需要做的另一件事是使输入中的文本大小至少为 16px,否则 iOS 会强制它执行烦人的“放大”功能。

如果您不想单击链接,也可以粘贴。

//Set 2 global variables
var scrollTopPosition = 0;
var lastKnownScrollTopPosition = 0;

//when the document loads
$(document).ready(function(){

  //this only runs on the right platform -- this step is not necessary, it should work on all platforms
  if( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) {

    //There is some css below that applies here
    $('body').addClass('platform-ios');

    //As you scroll, record the scrolltop position in global variable
    $(window).scroll(function () {
      scrollTopPosition = $(document).scrollTop();
    });

    //when the modal displays, set the top of the (now fixed position) body to force it to the stay in the same place
    $('.modal').on('show.bs.modal', function () {

      //scroll position is position, but top is negative
      $('body').css('top', (scrollTopPosition * -1));

      //save this number for later
      lastKnownScrollTopPosition = scrollTopPosition;
    });

    //on modal hide
    $('.modal').on('hidden.bs.modal', function () {

      //force scroll the body back down to the right spot (you cannot just use scrollTopPosition, because it gets set to zero when the position of the body is changed by bootstrap
      $('body').scrollTop(lastKnownScrollTopPosition);
    });
  }
});

css:

// You probably already have this, but just in case you don't
body.modal-open {
  overflow: hidden;
  width: 100%;
  height: 100%;
}
//only on this platform does it need to be fixed as well
body.platform-ios.modal-open {
  position: fixed;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

专注于模式内的输入会导致 ios 向下滚动 的相关文章

随机推荐

  • Android MediaPlayer 在某些设备上不播放声音

    我为我的应用程序发出了简单的警报声 但问题是声音在某些设备上播放 而在其他设备上则不播放 示例代码如下 public void audioPlayer leshon tingull kur ka kolision Armando 8 7 2
  • 如何隐藏或加密 JavaScript 代码? [复制]

    这个问题在这里已经有答案了 有没有办法隐藏或加密 JavaScript 代码以防止人们查看 复制和 或修改专有程序 您可以混淆它 但没有办法完全保护它 混淆器示例 https obfuscator io https obfuscator i
  • C# 枚举标志比较

    给定以下标志 Flags public enum Operations add 1 subtract 2 multiply 4 divide 8 eval 16 如何实现 IF 条件来执行每个操作 在我的尝试中 第一个条件适用于添加 评估
  • Office Web 应用程序 - 删除按钮

    有没有办法从 Office Web 应用程序中删除按钮或完整功能区 我想删除下载 添加到一个驱动器等 示例网址如下 https view officeapps live com op view aspx src www cse lehigh
  • jQuery AJAX - 意外的标记 + 解析器错误

    我今天使用 jQuery 和 AJAX 编写了一个脚本 但出现了一些错误 剧本 function changeAdmin id document ready function ta modarea id fadeOut fast ta m
  • 如何按不在数据框中的数组对数据框进行排序

    我已经在不同的上下文中多次回答过这个问题 并且我意识到在任何地方都没有指定好的规范方法 因此 设置一个简单的问题 Problem df pd DataFrame dict A range 6 B 1 2 3 print df A B 0 0
  • Python 在变量后面插入回车符和换行符,而不仅仅是换行符

    我创建了一个 python 脚本来输出 AAAA ZZZZ 等每 1 4 个字符的字母组合 它工作得很好 但是我只需要在打印变量的末尾插入换行符 因为我将其用作要在另一个脚本中使用的单词列表 我尝试同时使用 r 和 n 但是使用 n 在末尾
  • 如何通过简写“if-else”结果来中断循环?

    假设我在循环内有一个简写的 if else 语句 如下例所示 for a b c b c More unnecessary code if the result was true 我想通过条件的结果来打破循环 for a b c b bre
  • iOS 编写宏检测 3.5 英寸或 4 英寸显示器 [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个宏来确定设备是 3 5 英寸还是 4 英寸 下面有一些类似的东西 define IOS OLDER THAN 6 UIDevice currentDevice systemVersion flo
  • Elixir 中的“|>”是什么意思?

    我正在阅读 github 上的一些 Elixir 代码 我发现 gt 经常被使用 它没有出现在列表中手术 http elixir lang org getting started basic operators html在文档网站上 这是什
  • 如何将 HTML 输入类型属性从“密码”更改为“文本”?

    我想更改 HTML input 元素 type 属性 从 type password 更改为 type text 我知道通过 ID 查找元素会更容易 但并非每个页面都有相同的密码输入 ID 如何定位密码输入并将其内部值更改为文本类型 我有这
  • 需要击败 GC 并在对象超出范围后将其销毁

    我有几段代码需要用互斥锁来保护 问题是代码看起来像这样 lock mylockobject if foo throw new MyException foo failed if bar throw new MyException bar f
  • .Net/C# 构建工具 - NAnt 是首选工具吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我即将设置 net C 项目的自动构建 我在网上搜索了很多 有很多关于这个名为 NAnt 的工具的参考 我的问题是 NAnt 被认为是一个很好的
  • Android 2.2 中的 org.apache.http.client 是什么版本?如何在应用程序中使用lib?

    如何找出 Android 2 2 中 HTTPclient 的版本 我认为这是重要的信息 但我在 Google 的 API 文档中没有看到任何内容http developer android com reference org apache
  • 分叉 AOSP 清单后如何正确运行存储库同步?

    最近我决定深入 Android 开源项目世界 这就是我对 AOSP 生活的想象 为了深入了解 AOSP 世界 我需要亲自动手修改项目中的代码 我将在三台不同的计算机上执行此操作 因此我需要将我的工作存储在远程 git 存储库中 所以我需要在
  • C#:从 lambda 表达式获取链中的属性名称

    我正在开发一个使用 lambda 表达式来指定属性的 API 我正在使用这段与此类似的著名代码 这是简化且不完整的 只是为了弄清楚我在说什么 public void Foo
  • 按列获取数据网格的值

    您如何知道标题列中特定行的值id row index id 0 54 1 34 2 12 select id where row index 1例如 我应该得到 34 的值 This is datagrid 不太确定您在寻找这个 无论如何
  • 如何在vscode webview中使用iframe

    在 vscode extension webview catcoding 中 我想加载外部网页 如 google i tried panel webview html 谷歌有X Frame Options 响应头设置为SAMEORIGIN
  • 是否可以通过 ADFS 创建新用户?

    我正在研究使用 SAML 和 ADFS 设置单点登录所涉及的内容 我无法回答并且似乎无法在任何地方找到一个查询 是否可以通过 ADFS 执行通常的用户配置文件操作 例如 我可以通过 ADFS 注册新用户吗 我可以通过 ADFS 提供忘记密码
  • 专注于模式内的输入会导致 ios 向下滚动

    我遇到了模态内的输入并提出了问题 当用户打开模式时 它会覆盖整个页面 并设置为高 z index 和绝对位置 一旦用户专注于模式内的输入 在 iOS 上 整个页面就会由于某种原因向下滚动 我认为 ios 的行为是将输入字段向上滚动一点 以便