平滑滚动效果在 iOS 上的 iframe 中不起作用
Smooth scroll effect does not work in an iframe on iOS
下面的脚本在单击网页中的锚链接时添加了平滑的scrool效果。
$('a').click(function(){
$('html, body').animate({
scrollTop: $( $.attr(this, 'href') ).offset().top
}, 500);
return false;
});
适用于大多数现代浏览器,包括适用于 iOS 和 Android 的移动浏览器。但是,如果脚本在 iframe 中运行,iOS 上的浏览器不会应用平滑的 scrool 效果。事实上,锚链接是无用的(如果用户点击一个锚链接,什么都不会发生)。即使在 iframe 中,该脚本也可以在 Android 和几乎所有桌面浏览器上运行。
iOS在iframes方面存在各种问题。例如,即使 iframe 的声明高度为 300px,iOS 也会扩展 iframe 的高度以适应内容,而不会在内部滚动。解决此问题:将 iframe 包装在高度为 300px 的div 中,然后添加 overflow: auto;
和 -webkit-overflow-scrolling: touch;
。
回到我的问题。为什么这么简单的脚本在 iframe 的 iOS 上失败?这可能与iOS处理iframe的方式有关(如上所述)吗?
为了澄清事情,我需要平滑滚动效果才能在iOS上的iframe中工作。Iframe 和父文档都来自同一域。
有人,知道吗?
有关工作示例,请参阅此处:http://www.nightskyinfo.com/iframe2/
主 html 文件的源代码:http://www.nightskyinfo.com/iframe2/index.txt
放在iframe中的html文件的Souce代码在这里:http://www.nightskyinfo.com/iframe2/iframe.txt
如果脚本在 iframe 中运行,jQuery 选择器$
将在 iframe 的文档而不是父文档中查找元素。这是选择器上下文。要在父文档中查找元素,您确实可以通过执行$('html, body', parent.document)
(或top.document
)来指定父文档。
但是,要从框架访问父文档,框架域必须与父文档相同。检查这一点。
在您的请求中不明显理解的是您最终需要滚动哪个文档? 父文档还是框架文档?
另一件事,无法通过此实现您想要实现的目标:
$( $.attr(this, 'href') ).offset().top
恕我直言,这个选择器不会匹配任何内容。除非您将 CSS 选择器存储为href
值...
我想您正在寻找更简单(并且顺便说一句)的东西:
$(this).offset().top
希望我有帮助。
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 从同一域上的 iframe 中的元素获取值
- 从父窗口上的iFrame内容中关闭iFrame
- 将事件发送到其他域上的iFrame
- 如何在 ajax 调用上的 iframe 中加载部分视图
- 移动设备上的 iFrame 重定向主页问题
- 将 PHP 联系表单加载到位于单独 HTML 页面上的 Iframe 中
- j查询对完全加载帧上的 iframe 内部帧的访问
- 将鼠标悬停在位于我的页面上的 iframe 上的绑定事件,其中包含包含的 src
- 从 iFrame 中每个页面上的 iFrame URL 获取数据
- 如何从不同域上的 iFrame 关闭花式盒子(灯箱)
- 表单定位到不同页面上的 iFrame
- 移动版 Chrome 上的 IFrame 播放器 API
- 平滑滚动效果在 iOS 上的 iframe 中不起作用
- 跨域上的 iframe 与窗口通信
- 将表单张贴到另一页上的iframe中
- 使用asp.net上的iframe mvc 3创建编辑器
- 可以'不要通过Chrome上的iFrame登录应用程序,但可以直接查看
- Firefox可以'无法访问同一域上的iframe打印
- 非本地域上的iFrame scrollTop