2011-03-31 3 views
1

Y at-il un moyen de détecter si un élément est actuellement situé dans un div?S'il se trouve dans un div

J'ai un menu vertical déroulant. Je définis la hauteur de la div de navigation, puis débordement: caché donc je ne vois que quelques-uns des liens à la fois. Donc, je clique sur un graphique en bas de la navigation pour déplacer les liens vers le bas. J'ai un autre graphique en haut pour obtenir l'effet inverse. Mais, je n'arrive pas à trouver un moyen fiable d'arrêter l'animation. Ainsi, le mouvement continue de dépasser les premiers et derniers liens du menu.

Vous pouvez voir le problème à http://test2omniforce.co.uk/test

Répondre

2

Vous devez tester la valeur actuelle de la marge supérieure du contenu div # lorsque vous cliquez sur les boutons. Ainsi, par exemple, l'animation du bouton du haut ne devrait être jouée que si div # content margin-top est inférieur à 0, et l'animation du bouton du bas quand le margin-top est supérieur à -500.

+0

Comment puis-je tester les éléments margin-top? – sisko

+0

$ ('div # content'). Css ('marge-top') vous donnera la marge supérieure. Jetez un oeil à ceci: http://jsfiddle.net/yCreg/ – shanethehat

1

Juste pour répondre à votre question, jQuery offre le sélecteur :hashelp pseudo pour détecter. On dirait

if($('div:has(span)').length) { } // true if a div contains a `<span>` node. 

Mais je ne pense pas que ce soit votre problème. Pour arrêter une animation fiable, vous pouvez simplement appeler .stop()help.
probablement comme

$('div').stop(true,true).animate() // ... 

Les paramètres indiquent jQuery, pour effacer la file d'attente actuelle fx et sauter à la fin.

Une autre technique pour éviter plusieurs exécutant d'effets asynchrones, est d'appeler le pseudo-sélecteur . Avec cela, vous pouvez détecter si un élément est actuellement animé et si c'est le cas, ne rien faire.

if($('div').is(':animated')) { } // div is currently animated 
+1

L'OP a du mal à déterminer si le contenu de ce div sort de la fenêtre (?). Il a besoin de quelque chose pour savoir si le haut/bas du menu est visible avant de l'animer. – JohnP

0

Essayez ceci:

if ($('#myElement').closest('div').length > 0) { 
    // yup, I'm inside a DIV 
} 

Vous pouvez également brancher un sélecteur jQuery approprié dans la fonction .closest(). Donc, pour vérifier si un élément est dans mon DIV scrollable, vous pouvez utiliser:

$('#myElement').closest('div#myScrollableDiv').length > 0 
Questions connexes