Javascript 平滑滚动效果在iOS上的iframe中不起作用
下面的脚本在单击网页中的锚链接时添加了平滑的scrool效果Javascript 平滑滚动效果在iOS上的iframe中不起作用,javascript,jquery,html,ios,iframe,Javascript,Jquery,Html,Ios,Iframe,下面的脚本在单击网页中的锚链接时添加了平滑的scrool效果 $('a').click(function(){ $('html, body').animate({ scrollTop: $( $.attr(this, 'href') ).offset().top }, 500); return false; }); 适用于大多数现代浏览器,包括iOS和Android手机浏览器。但是,如果脚本在iframe中运行,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在iFrame上有各种各样的问题。例如,即使iframe的声明高度为300px,iOS也会扩展iframe的高度以适应内容,而不会在内部滚动。解决方法是:将iframe包装在一个高度为300px的div中,并添加overflow:auto
和-webkit溢出滚动:触摸代码>
回到我的问题上来。为什么这么简单的脚本在iframe中的iOS上失败?这是否与iOS处理iFrame的方式有关(如上所述)
为了澄清问题,我需要在iOS上的iframe内部使用平滑滚动效果。Iframe和父文档都来自同一个域
有人知道吗
有关工作示例,请参见此处:
主html文件的源代码:
放在iframe中的html文件的源代码:如果脚本在iframe中运行,jQuery选择器将查找iframe文档中的元素,而不是父文档中的元素。这是选择器上下文。要在父文档中查找元素,确实可以通过执行$('html,body',parent.document)
(或top.document
)来指定父文档
但是,要从框架访问父文档,框架域必须与父域相同。检查这一点
在您的请求中,有一点不太容易理解,那就是您最终需要滚动哪个文档?父帧还是帧帧
另一件事是,你无法通过以下方式实现目标:
$( $.attr(this, 'href') ).offset().top
嗯,这个选择器将不匹配任何内容。除非您将CSS选择器存储为href
值
我想您正在寻找更简单(顺便说一句)的解决方案:
希望我能帮上忙。我需要滚动框架文档,这两个文档都来自同一个域。谢谢你解释选择器上下文,我现在明白了。我们将继续对此进行一些测试。查看您的z顺序。z-index必须为0才能使用本机滚动。谢谢,但不是这样。现在测试。对不起,伙计,值得一试。。。最近2c)您是否尝试过scrollIntoView()
$(this).offset().top