4

为了显示对话框,我需要知道窗口的当前滚动位置。这是在$(document).readyjQuery 块中完成的。

但是,Internet Explorer 在必须记住滚动位置时会中断。

您可以通过在 IE 中打开以下 HTML 代码来尝试此操作,向下滚动一点并点击重新加载(对不起,我没有创建小提琴 - 因为滚动它在那里不起作用)。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"     
type="text/javascript" charset="utf-8"></script>

<script type="text/javascript" charset="utf-8">
  $(document).ready(function() {
    alert(document.body.scrollTop);
    alert(document.body.scrollTop);
  });
</script>

<div style="height:4000px;">
</div>

第一个alert显示0,第二个显示正确的数字。setTimeout如果我使用并等待(在我的情况下)20 毫秒,它也可以在没有第一次警报的情况下工作——当然,在其他情况下这可能需要另外的时间,因此不是解决方案。

我认为问题在于 IE 首先滚动到顶部,做一些事情,然后,过了一会儿,恢复之前的滚动位置(可能它必须先渲染东西才能确保这个滚动位置仍然存在)。

有什么合适的方法可以立即让浏览器滚动吗?

4

1 回答 1

0

有几个属性可以获取页面滚动,并且在每个浏览器中都不同。这是我为接收正确滚动而编写的函数:

函数getScroll(类型)
{
    类型 = 类型 || '最佳';

    变量结果 = 0;
    变量滚动 = 0;
    如果(类型==='顶部')
    {
        if (ISQ.Http.browser.app !== 'ie' || ISQ.Http.browser.isIE9)
            滚动 = window.pageYOffset;
        if (ISQ.Http.browser.app !== 'ie')
            scroll = returnMaxScroll(scroll, window.scrollY);
        scroll = returnMaxScroll(scroll, document.body.scrollTop);
        scroll = returnMaxScroll(scroll, document.documentElement.scrollTop);
        scroll = returnMaxScroll(scroll, document.body.parentNode.scrollTop);
    }
    else if (type === 'left')
    {
        if (ISQ.Http.browser.app !== 'ie' || ISQ.Http.browser.isIE9)
            滚动 = window.pageXOffset;
        if (ISQ.Http.browser.app !== 'ie')
            scroll = returnMaxScroll(scroll, window.scrollX);
        scroll = returnMaxScroll(scroll, document.body.scrollLeft);
        scroll = returnMaxScroll(scroll, document.documentElement.scrollLeft);
        scroll = returnMaxScroll(scroll, document.body.parentNode.scrollLeft);
    }
    else if (type === '身高')
    {
        开关(ISQ.Http.browser.app)
        {
            案例“铬”:
            案例“ff”:
            案例“歌剧”:
            案例“野生动物园”:
                // iframe
                如果(window.top === 窗口)
                    滚动 = document.documentElement.scrollHeight;
                // 顶部窗户
                别的
                    滚动 = document.body.scrollHeight;
                休息;
            默认:
                scroll = returnMaxScroll(scroll, document.body.scrollHeight);
                scroll = returnMaxScroll(scroll, document.documentElement.scrollHeight);
                scroll = returnMaxScroll(scroll, document.body.parentNode.scrollHeight);
                休息;

        }
    }
    否则如果(类型==='宽度')
    {
        scroll = returnMaxScroll(scroll, document.body.scrollWidth);
        scroll = returnMaxScroll(scroll, document.documentElement.scrollWidth);
        scroll = returnMaxScroll(scroll, document.body.parentNode.scrollWidth);
    }

    返回滚动;
}
函数 returnMaxScroll(value1, value2)
{
    if (value1 > value2) 返回值1;
    返回值2;
}
仅供参考:您可能需要实现这些布尔值:
- ISQ.Http.browser.app !== 'ie'
- ISQ.Http.browser.isIE9

我希望它会帮助你:)

于 2012-08-20T22:23:19.777 回答