2011-01-27 2 views
3

J'ai implémenté stickyfloat (http://plugins.jquery.com/files/stickyfloat_0.htm) sur un site. Cela fonctionne très bien avec un gotcha. La fonction se déclenche sur $(window).scroll et non sur $(window).load. Je veux qu'il se déclenche soit parce que je suis en liaison avec des points d'ancrage dans la page (http://tre-stage.wdogsystems.com:8000/faq/#does-the-sale-of-my-receivables-have-a -negative-effect-on-my-credit-report) et je voudrais que le menu latéral apparaisse quand la page se charge et pas seulement quand je lance un défilement.

Si vous regardez la page ci-dessus, cela fonctionne comme je le veux. Cependant, c'est seulement parce que j'ai répété la même fonction avec un $(window).load. Cela me semble très inefficace. Alors, y a-t-il un moyen d'enchaîner les deux ensemble?

Par exemple:

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

Vous ne voulez pas dire '$ (document) .ready'? – SLaks

+0

Voir le post de John Resig sur pourquoi il est mauvais d'attacher à l'événement de défilement et quoi faire à la place: http://ejohn.org/blog/learning-from-twitter/ – bdukes

Répondre

2

.bind() de jQuery help méthode permet à plusieurs événements liés à la fois.

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

Comme ceci:

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

c'est probablement une mauvaise idée puisque les événements 'scroll 'sont assez cpu-load lourd. Cela ferait feu deux fois. – jAndy

+0

Cela a fonctionné parfaitement! Merci beaucoup! –

+0

@jAndy: Vous avez raison; édité. – SLaks

2

chaîne juste la liaison, comme:

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

mais il est très mauvaise idée d'attacher pour faire défiler l'événement

un très bon explication pourquoi et une excellente solution: http://ejohn.org/blog/learning-from-twitter/

0

Pourquoi ne déclenchez-vous pas simplement un événement de défilement de fenêtre en charge? Vous pouvez namespace votre événement de défilement trop pour l'isoler et d'avoir un meilleur accès à plus tard ...

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

Mais si vous étiez réellement désireux de l'exécuter sur la charge de la fenêtre (assurant le DOM est entièrement chargé incl. Images, etc.) alors les autres exemples mentionnés sont bien. Mais utilisez la méthode .on() plutôt que .bind().

$(window).on('scroll.myscroll load.myload', function() { 
    // do something on scroll and load events 
}); 
Questions connexes