2011-03-31 4 views
1

Есть ли способ определить, находится ли элемент в данный момент в div?Если он попадает в div

У меня есть прокрутка вертикального меню. Я установил высоту навигационного div, а затем переполнения: скрытый, поэтому я вижу только несколько ссылок за раз.

Итак, я нажимаю графику в нижней части навигации, чтобы переместить ссылки вниз. У меня есть еще одна графика сверху, чтобы получить противоположный эффект.

Но, я не могу найти надежный способ остановки анимации. Таким образом, движение продолжает идти мимо первого и последнего ссылок меню.

Вы можете увидеть проблему в http://test2omniforce.co.uk/test

ответ

2

При нажатии кнопок необходимо проверить текущее значение верхнего края содержимого div #. Так, например, анимация верхней кнопки должна воспроизводиться только в том случае, если верхний край содержимого div # меньше 0, а анимация нижней кнопки, когда верхняя граница превышает -500.

+0

как я могу проверить элементы margin-top? – sisko

+0

$ ('div # content'). Css ('margin-top') даст вам верхний край. Посмотрите на это: http://jsfiddle.net/yCreg/ – shanethehat

1

Просто, чтобы ответить на ваш вопрос, JQuery предлагает селектор :hashelp псевдокода для обнаружения. Похоже, что

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

Но я не думаю, что это ваша проблема. Для надежной остановки анимации вы можете просто позвонить .stop()help.
Возможно нравится

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

Параметры сказать JQuery, чтобы очистить текущий очередь Fx и перейти к концу.

Другая методика, чтобы избежать нескольких исполняемых асинхронных эффектов, заключается в том, чтобы вызвать псевдоселектор :animatedhelp. При этом вы можете обнаружить, если элемент в данный момент анимирован, и если да, ничего не делайте.

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

ОП фактически возникают проблемы с выяснить, собирается ли содержимое внутри этого DIV из окна просмотра (?). Ему нужно что-то выяснить, видна ли верхняя/нижняя часть меню перед его оживлением. – JohnP

0

Попробуйте это:

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

Вы также можете подключить соответствующий селектор JQuery внутри функций .closest(). Таким образом, чтобы проверить, если элемент находится внутри моей прокрутки DIV, вы можете использовать:

$('#myElement').closest('div#myScrollableDiv').length > 0 
Смежные вопросы