2011-01-27 2 views
3

Я реализовал stickyfloat (http://plugins.jquery.com/files/stickyfloat_0.htm) на сайте. Он отлично работает с одним из них. Функция запускается на $(window).scroll, а не на $(window).load. Я хочу, чтобы это срабатывало либо потому, что я связываюсь с опорными точками на странице (http://tre-stage.wdogsystems.com:8000/faq/#does-the-sale-of-my-receivables-have-a -negative-effect-on-my-credit-report), и я хотел бы, чтобы боковое меню появлялось при загрузке страницы, а не только при начале прокрутки.

Если вы посмотрите на страницу выше, она работает так, как я хочу. Однако, это только потому, что я повторил ту же функцию с $(window).load. Это кажется мне очень неэффективным. Итак, есть ли способ объединить эти два?

Например:

$(window).scroll || $(window).load (function() ... 
+0

Не имеете в виду '$ (document) .ready'? – SLaks

+0

См. Сообщение Джона Ресига о том, почему плохо прикрепить к событию прокрутки и что делать вместо этого: http://ejohn.org/blog/learning-from-twitter/ – bdukes

ответ

2

метод JQuery в .bind()help позволяет несколько событий, связанных одновременно.

$(window).bind('scroll load', function() { 
    // code here triggers for both, scroll & load events 
}); 
1

Как это:

$(document).bind('ready load scroll', function() { ... }); 
+0

Это, вероятно, плохая идея, так как события 'scroll' довольно cpu-load тяжелый. Это уволило бы его дважды. – jAndy

+0

Это сработало отлично! Спасибо огромное! –

+0

@jAndy: Вы правы; изм. – SLaks

2

только цепь в затруднительное, как:

$(window).bind("scroll load", ...) 

однако это очень плохая идея, чтобы прикрепить прокручивать событие

очень хороший объяснение почему и отличное решение: http://ejohn.org/blog/learning-from-twitter/

0

Почему вы просто не запускаете событие прокрутки окна при загрузке? Вы можете переместить ваши события прокрутки слишком, чтобы изолировать его и иметь лучший доступ к нему позже ...

$(window) 
    .on('scroll.myscroll', function() { 
     // do something on scroll event 
    }) 
    .trigger('scroll.myscroll'); // trigger scroll event on pageload 

Но если вы были на самом деле хотите, чтобы запустить его на окно нагрузки (обеспечивая DOM полностью загружен вкл. Изображения и т.д.), то другие примеры, упомянутые, являются точными. Но используйте метод .on(), а не .bind().

$(window).on('scroll.myscroll load.myload', function() { 
    // do something on scroll and load events 
}); 
Смежные вопросы