【发布时间】:2014-06-02 07:09:19
【问题描述】:
我一直在开发一个 jQuery Mobile 网站,并注意到一旦页面加载,它会在一两秒后跳回页面顶部 - 如果用户立即向下滚动,则会产生可怕的用户体验.
事实证明,只有当页面上存在 HTML 5 VIDEO 标签时才会发生这种情况 - 即使它没有关联的脚本、绝对大小,即使它位于 iframe 中。
我做了一个示例测试页来演示:
如何测试行为
- 打开jsfiddle http://jsfiddle.net/MR966/1
- 点击
Run - 在输出面板中单击立即并按几次空格键向下滚动。您必须在页面加载时立即执行此操作。
- 加载 Youtube 视频后,页面将跳转到顶部。
- 如果速度不够快,请单击
Run,然后重试。
<HEAD>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.css" />
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.js"
<BODY>
<h1>JQuery Mobile Video Jump</h1>
<div class="fake-content"></div>
<div class="fake-content"></div>
<div class="fake-content"></div>
<div class="fake-content"></div>
<div class="fake-content"></div>
<div class="fake-content"></div>
<div class="fake-content"></div>
<iframe width="640" height="390" src="//www.youtube.com/embed/EQ1HKCYJM5U" frameborder="0" allowfullscreen></iframe>
内容可以是任何东西——只要足够长到至少一个屏幕的高度。
.fake-content
{
margin: 1em;
background: orange;
height: 10em;
}
注意事项
- 删除 jQuery Mobile 会停止这种行为:http://jsfiddle.net/MR966/2/(你会看到背景是黄色的,表明它没有被初始化)。所以它肯定是在做一些事情来导致这种情况。
- 删除视频会停止此行为。
- 纯视频标签和 YouTube 会发生这种情况 - 考虑到它们位于外部加载的 iFrame 中,这有点令人惊讶。
- “视频”一词在 jQuery Mobile 源代码中没有出现一次!
- 这发生在 Chrome / iPad / IE / Firefox 上。
- 在 iPad 上尤其糟糕,因为页面不会跳转到顶部,直到滚动因减速而完全停止。
- 如果您没有发现问题,请继续尝试,使用较慢的 Internet 连接或将 HTML 从 JSFiddle 复制到本地页面。
- 在我包含其他资源的实际页面上,这比这个简单的快速测试页面上的问题要大得多。
我的每个页面上都有视频,如果我无法解决这个问题,我需要在最后一刻放弃 JQM:-/
【问题讨论】:
-
JQM 在完全加载后滚动到顶部。如果您删除视频,行为不会改变。检查此答案以覆盖滚动stackoverflow.com/a/21989837/1771795
-
但具有讽刺意味的是,这种跳跃问题只发生在初始页面加载时。这是由于 $window.load 与试图隐藏 iOS 工具栏有关。我设法禁用它并在下面添加了一个答案