如何获得iframe的scrollTop
当window是iframe时,jQuery的scrollTop返回null。 有没有人能够弄清楚如何获得iframe的scrollTop?
更多信息:
我的脚本在iframe本身运行,父窗口在另一个域上,所以我无法访问iframe的ID或类似的东西
您可以使用此设置设置scrollTop
:
$("html,body").scrollTop(25);
所以你可以试试这样:
$("html,body").scrollTop();
因为不同的浏览器在不同的元素(body或html)上设置scrollTop
。
来自scrollTo插件:
但在某些浏览器中,这可能仍会失败。 以下是Ariel Flesher的jQuery scrollTo插件源代码的相关部分:
// Hack, hack, hack :) // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) $.fn._scrollable = function(){ return this.map(function(){ var elem = this, isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1; if( ! isWin ) { return elem; } var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem; return $.browser.safari || doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement; }); };
然后你可以运行:
$(window)._scrollable().scrollTop();
确定iframe向下滚动的距离。
$('#myIframe').contents().scrollTop()
我在尝试在iframe中设置scrollTop时发现了这个问题…不完全是你的问题(你想要获取)但是这里的iframes里面的解决方案对于那些也最终在这里试图设置的人来说。
如果您想滚动到页面顶部, 这将无法在iframe中使用:
$("html,body").scrollTop(0);
但是,这将有效:
document.getElementById("wrapper").scrollIntoView();
或者与jQuery等效:
$("#wrapper")[0].scrollIntoView();
对于此标记(包含在iframe中):
好旧的javascript:
scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop;
$('#myIframe').contents().scrollTop(0);
仅适用于“0”作为参数
或使用这个
sample.showLoader = function() { // show cursor wait document.getElementsByTagName('body')[0].style.cursor = 'wait'; var loader = $('#statusloader'); // check if we're runnign within an iframe var isIframe = top !== self; if (isIframe) { var topPos = top.pageYOffset + 300; // show up loader in middle of the screen loader.show().css({ top : topPos, left : '50%' }); } else { // show up loader in middle of the screen loader.show().css({ top : '50%', left : '50%' }); } };
我知道我已经迟到了这个游戏,但是我试图在移动设备上找到一个很长的列表。 由于跨域冲突(我无法访问父窗口),scrollTop()不能为我工作,但更改高度确实:
$('#someClickableElementInIFrame').on('click', function(e){ $("html body").animate({ 'height' : "0" }, { complete: function(){ $("html body").css({ 'height' : "auto" }) } }) });