1

私はこのようなことをする関数を持っています:

function my_function() {
  if ($('#footer').outerHeight() > 100) {
  $('#footer').height(...) ;
  $('#footer').css(....) ;
}

この関数はスクロールするたびに呼び出されるので、この$('#footer')を何度も実行するのは悪いことではないかと思います。もしそうなら、これを解決するための良い方法は何でしょうか?

4

6 に答える 6

4

パフォーマンスを向上させるには、このようなソリューションが必要だと思います。

ページ内のJavaスクリプトのパフォーマンスを向上させる方法は?

避けるべき一般的なjQueryの落とし穴は何ですか?

于 2013-01-08T14:08:44.890 に答える
2

関数をチェーンし、セレクターを次のようにキャッシュする必要があります。

function my_function() {
  var footer = $('#footer');
  if (footer.outerHeight() > 100) {
      footer.height(...).css(....);
  }
}

var footer = $('#footer');関数の外側を移動してグローバルにし、さらに改善することもできます。

于 2013-01-08T13:48:29.237 に答える
0

あなたはこのようなことをすることができます:

var $footer;
function my_function() {
    $footer = $footer || $('#footer');
    if ($footer.outerHeight() > 100) {
        $footer.height(...) ;
        $footer.css(....) ;
    }
}
于 2013-01-08T13:48:44.643 に答える
0

他の答えは良いですが、ifステートメントをまったく評価したくない場合(過去)は、次のことを試してください。

var $footer;
var footerEvaled = false;
function my_function() {
if(footerEvaled == false)
{
   $footer = $footer || $('#footer');
    if ( $footer.outerHeight() > 100) {
         $footer.height(...) ;
         $footer.css(....) ;
         footerEvaled = true;
    }
}

}
于 2013-01-08T13:52:50.893 に答える
0

別のオプションはwithステートメントを使用することですが、お勧めしません:

function my_function() {
    with ($("#footer")) {
        if (outerHeight() > 100) {
            height(...).css(...);
        }
    }
}
于 2013-01-08T13:56:33.437 に答える
0

関数の前の変数に$('#footer')を格納できます。例えば:

var footerHTML = $('#footer');
function my_function() {
  if ( footerHTML.outerHeight() > 100) {
  footerHTML.height(...) ;
  footerHTML.css(....) ;
}

これにより、同じ要素に対して複数のJQueryインスタンスを作成する必要がなくなります。

于 2013-01-08T14:08:35.637 に答える