Должен ли я хранить $ (document) .height () и / или $ (window) .height () как переменные? - PullRequest
2 голосов
/ 14 апреля 2011

Является ли хорошей идеей хранить эти значения как переменные (за исключением .scroll ()) в следующем примере?

$(window).scroll(function(){
  if ( $(document).height() <= ( $(window).height() + $(window).scrollTop() ) ) {
    // position stuff
  } else {
    // other position stuff
  }
});

Единственный недостаток, который я вижу, - это высота следует проверить еще раз в случае изменения размера окна.Или мне нужно только хранить объекты сами по себе?

Любая обратная связь с благодарностью!

Ответы [ 4 ]

6 голосов
/ 14 апреля 2011

По крайней мере, определенно хорошая идея хранить ссылки на $(document) и $(window) вне обратного вызова scroll, поскольку событие прокрутки может запускаться многократно и быстро.

var $win = $(window),
    $doc = $(document);

$win.scroll(function(){
  if ( $doc.height() <= ( $win.height() + $win.scrollTop() ) ) {
    // position stuff
  } else {
    // other position stuff
  }
});

Не мешало бы делать так, как вы просите, а также сохранять высоту документа и окна за пределами обратного вызова & mdash; при условии, что вы обновляете их по мере необходимости. Хороший способ справиться со всем этим - использовать превосходный плагин jQuery throttle / debounce , который предоставляет простой интерфейс, позволяющий убедиться, что функция не запускается слишком часто.

2 голосов
/ 14 апреля 2011

я делаю то же самое, но добавляю что-то еще:

$(window).scroll(function(){
  if ( $(document).height() <= ( $(window).height() + $(window).scrollTop() ) ) {
    // position stuff
  } else {
    // other position stuff
  }
}).resize(function(){$(this).scroll()});//will call the scroll method on resize

или то, что вы можете сделать, это:

function pageSizer(){
      if ( $(document).height() <= ( $(window).height() + $(window).scrollTop() ) ) {
        // position stuff
      } else {
        // other position stuff
      }
}

$(window).scroll(pageSizer).resize(pageSizer);
0 голосов
/ 14 апреля 2011

Каждый раз, когда вы оборачиваете элемент с помощью jQuery, вы создаете объект jQuery. Если вы планируете использовать один и тот же объект jQuery много раз, то кеширование - это мудрое решение. Это делается путем сохранения его в переменной и просто вызывайте переменную каждый раз, когда вы захотите ее использовать. Это больше не будет создавать объект jQuery, а будет использовать кэшированную версию.

Пример:

var wh = $(window).height();
0 голосов
/ 14 апреля 2011

Сохраните $(document) и $(window), но еще раз проверьте height () и scrollTop (), так как это может измениться в зависимости от взаимодействия с пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...