2008-12-10 9 views
25

Je voudrais savoir s'il existe un événement jQuery que je peux utiliser pour déterminer quand la propriété top d'un DIV particulier a changé.Evénement jQuery pour détecter quand la position de l'élément change

Par exemple, j'ai un contenu invisible au-dessus d'un DIV. Lorsque ce contenu devient visible, le DIV est décalé vers le bas. Je voudrais capturer cet événement, puis utiliser la fonction offset() pour obtenir les coordonnées X/Y.

+2

Avez-vous déjà trouvé une solution? –

+1

@Sam Dutton - Non. Ma solution était de repenser une partie de la mise en page et de la structure. Les choses devenaient trop complexes. –

Répondre

0

Je thiiink vous devriez être en mesure de le faire:

$(document).ready(function(){ 
    $("#mydiv").bind("movestart", function(){ ...remember start position... }); 
    $("#mydiv").bind("moveend", function(){ ...calculate offsets etc... }); 
}); 
+0

sur une autre idée, cela pourrait ne pas être possible pour les éléments relativement positionnés – Strelok

+2

Quels sont ces événements 'movestart' et' moveend'? https://plugins.jquery.com/event.move/? Dans ce cas, il semble que ces événements sont liés aux mouvements du toucher et de la souris, pas nécessairement à des changements arbitraires de position des éléments. – Abdull

6

La réponse facile est qu'il n'y a aucun événement dans les DOM pour détecter les mises à jour de mise en page.

Vous avez un couple d'options la façon dont je le vois:

  1. Sondage, méchant, mais il peut travailler en fonction de vos besoins de fréquence de mise à jour.

  2. Puisez dans tout événement provoque l'invisible DIV pour changer la taille et faire tout ce que vous devez faire dans ce gestionnaire


je me corriger.

J'ai regardé le DOM et j'ai remarqué l'événement DOMAttrModified et j'ai trouvé ce JQuery Plug-In que vous pourriez utiliser pour faire ce que vous voulez.

Comme le mentionne l'article, il fonctionne très bien dans IE et Firefox, mais semble avoir des problèmes dans WebKit.

+2

Funky! Je trouve à plusieurs reprises trouver de la merde cool sur le blog de ce mec! ;) – Strelok

+2

Sérieusement, je ne sais pas comment il trouve le temps à la fois de faire les choses qu'il fait et ensuite écrire ces entrées incroyablement détaillées à leur sujet ... – joshperry

+0

Je ne pense pas que le plugin lié fonctionnera pour les OP Cas. Si je comprends bien, l'événement DOMAttrModified ne se déclenche que lorsqu'un attribut est modifié par un script, et non après un changement comme l'OP fait référence. Cependant, l'événement propertychange se déclenchera (je pense) dans les deux cas: http://help.dottoro.com/ljdchxcl.php –

-2
$("#someId").resize(function() { 

// your code 

}); 
+0

cela ne fait rien. –