Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 平滑滚动效果在iOS上的iframe中不起作用_Javascript_Jquery_Html_Ios_Iframe - Fatal编程技术网

Javascript 平滑滚动效果在iOS上的iframe中不起作用

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

下面的脚本在单击网页中的锚链接时添加了平滑的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