window.top.document.body.scrollTop无法在Chrome或FireFox中运行

DNR*_*DNR 9 javascript firefox google-chrome

我有下面的代码将打开一个模态窗口.这适用于IE 8,但不适用于Chrome或FF.我是跨浏览器功能的新手.

function ShowModal(WindowID,FramesetID)
{
    window.onscroll = function () { window.top.document.getElementById(WindowID).style.top = window.top.document.body.scrollTop; };
    window.top.document.getElementById(WindowID).style.display = "block";
    window.top.document.getElementById(WindowID).style.top = document.body.scrollTop;

    widthv=parseInt(parseInt(screen.width)/1.50);
    heightv=parseInt(parseInt(screen.height)/1.50); 

    window.top.document.getElementById(FramesetID).style.width=widthv;
    window.top.document.getElementById(FramesetID).style.height=heightv;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助使这个代码Chrome&FF兼容吗?
我试图改变window.topwindow.parent,但没有运气另外,多个浏览器编码时(我已经浏览过,但并没有完全找到跨浏览器兼容的任何一套规则)的任何规则要记住?

更新:
问题是在IE中,此模态窗口大约出现在屏幕大小的一半.在FF和Chrome中,模态窗口大约是一美元硬币的大小.

Dan*_*den 27

根据您的浏览器当前的渲染模式,您可能需要使用document.documentElement.scrollTop而不是document.body.scrollTop(以及同样scrollLeft).

Peter-Paul Koch(quirksmode.org成名)的Evolt文章关于这个问题的一些很好的背景,但它是从2002年开始的,现在有点过时了.

正如其他人在暗示的那样,2011年解决此类问题的最简单方法就是使用现有的JavaScript框架. jQuery非常受欢迎(特别是在StackOverflow用户中),但还有很多其他用户.

  • 2017年还是这样吗?对于这么简单的事情,我必须使用第三方库,这似乎很荒谬。 (2认同)

pai*_*pai 17

另一种方案:

(document.documentElement.scrollTop || document.body.scrollTop)
Run Code Online (Sandbox Code Playgroud)


zsi*_*imo 7

您可以使用:

window.pageYOffset

  • zsimo,也许你可以详细说明它的作用以及OP可以在哪里找到这方面的参考。这会提高你的答案的质量。 (2认同)
  • 确定:我不认为有必要使用jQuery来解决Firefox的问题使用document.body.scrollTop返回0只需使用window.pageYOffset在页面滚动时获取距离顶部的距离:https://developer.mozilla .org/zh-CN/docs/Web/API/Window.scrollY Simone (2认同)

jam*_*ang -5

我会像 chrispanda 所建议的那样推荐 jQuery。jQuery 有一个内置的滚动事件,其余的只需几行即可编写来操作 html / css。

http://api.jquery.com/