0

ここ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 の高さを変更できるため、スムーズ スクロールが再び機能するようになりました。

しかし、ボタンをクリックしてアイテムをロードし、ドキュメントを再度変更するため、別の問題に直面しています。今回は上記のスクリプトが機能しないため、関数をクリック イベントに配置します。

$(".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());


});

これは私にはうまくいかないようです。では、クリックイベントの後にドキュメントの高さを取得および設定 (変更) するにはどうすればよいですか?

4

1 に答える 1

1

.live の代わりに .on を使用してみてください。.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/を見てください

于 2012-10-22T15:56:49.603 に答える