动态调用后设置并获取文档高度

时间:2012-10-22 15:49:37

标签: javascript jquery

我正在使用这里找到的平滑滚动插件nicescroll

我遇到的第一个问题是它将自己设置为'静态html高度'。这对我来说不起作用,因为我的文档是在窗口加载时加载项目。所以我添加了一个我发现的脚本:

    $(window).load(function () {

        function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}
$('html').height(getDocHeight());

即使在加载了所有动态项目后,此脚本也允许更改HTML高度,所以现在我的平滑滚动再次起作用。

但现在我面临另一个问题,因为我只需点击按钮就可以加载项目,从而再次更改文档。这次我的上面的脚本不起作用,所以我把这个函数放在click事件中:

$(".button").live("click", function(){


        function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}
$('html').height(getDocHeight());


});

这对我来说似乎不起作用。那么如何在点击事件后获取和设置(更改)文档高度?

1 个答案:

答案 0 :(得分:1)

尝试使用.on而不是.live。 .live已弃用,请查看jQuery文档以获取更多信息。

此外,您无需在.on处理程序中重新添加/ function / ...将其放在.on代码之外,因此您无需在内部重建函数处理程序每​​次!

所以,你的代码应该是这样的:

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

$("some .element above .button").on("click", ".button", function(){
    // put your click handler in here, to adjust the doc height
    $('html').height(getDocHeight());
});

我非常确定,直接从jQuery获得文档高度也是一种更简单的方法,所以你根本不需要你的getDocHeight()函数。看http://api.jquery.com/height/