javascript - 在 iframe 中使用时 scrollIntoView/scrollTo 在 IOS 中没有响应
问题描述
我有一个使用 iframe 在网站上显示的应用程序。
请看这个 jsfiddle -> http://jsfiddle.net/7Leatwyu/
这也是一个 stackblitz,它与我的 Angular 应用程序具有类似的代码设置 https://stackblitz.com/edit/angular-c2dnea
在这里你会看到我尝试了一些事情,比如添加 CSS 样式来考虑滚动,包括:
position: absolute;
top: 0;
left: 0;
right: 0;
bottom:0;
height: 100%;
overflow: auto;
width: 100%;
background-color: white;
z-index: 1000;
-webkit-overflow-scrolling: touch;
当您回答问题或单击下一个按钮时,它会使用下面的代码滚动到正确的下一个问题。如您所见 - 除了 iPhone (IOS) 之外的所有设备都可以使用。对于 IOS - 它不起作用。
scrollTo(el): void {
const element = document.querySelector(`#${el}`)
element.scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"});
}
在这被调用后,我期待窗口滚动到下一个问题,但它没有。那里有解决办法吗?我已经研究了一周,并尝试了许多不同的 javascript 和 CSS 解决方案,但都不起作用。
帮助..
解决方案
我讨厌多个浏览器。让网页设计师的生活变得痛苦。
无论如何caniuse在 旧的safari 浏览器scrollIntoView
上没有最好的支持。仍然不是 100% 更新的。
可以使用jquery吗?
$('html, body').animate({
scrollTop: $("div.top").offset().top
}, 1000)
像这样?
$(document).ready(function () {
$('#submit').click(function (){
$('html, body').animate({
scrollTop: $(".somediv").offset().top
}, 1000)
})
});
.somediv {
width: 100%;
height: 100vh;
background-color: blue;
margin-top: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text"><br />
<a id="submit" href="#">Submit</a>
<div class="somediv"></div>
我不知道这是否正是您想要实现的目标。只是另一种查看滚动到下一个的方式。
您始终可以先将其包装在 if 语句中:)
推荐阅读
- aem - AEM 6.3 ResourceResolverFactory 为空并抛出 NullPointerException
- c# - 使用 ClosedXML 加密 excel 文件
- java - SQLite 列越界 PreparedStatement
- python - Python 3.6/Tkinter:找不到文件-> FileNotFoundError:[Errno 2] 没有这样的文件或目录:'XXXX'
- swift - UISearchController 在 iOS 11 Swift 4 上隐藏状态栏
- php - facebook-php-sdk:我无法更新 Adset 的信息
- javascript - 在 Redactor 编辑器中添加类的选项
- scala - 如何在 Spark 中使用带有列类型参数的 instr() 函数
- selenium - TestNG xml + Linux OS + Jenkins --> 什么都没发生
- python - 2.7.3 的 Python -V 告诉我 2.7.15