Исчезновение DIV и позиции

#javascript #jquery #jquery-ui

#javascript #jquery #jquery-пользовательский интерфейс

Вопрос:

Я пишу плагин для всплывающего div-файла по щелчку мыши. У меня создан скрытый div, и я хочу его скрыть. Однако, вместо того, чтобы исчезать, он просто появляется, как если бы я вызвал show () . Я использую инструмент позиционирования пользовательского интерфейса jQuery, поэтому мой код выглядит следующим образом:

 $('#popover-1' index).fadeIn('slow').position({
                    of: elem,
                    my: 'center top',
                    at: 'center bottom',
                    offset: '0 10'
                });
  

Я подумал, что, возможно, я попробую быть умным, и изменил это на это, но без эффекта:

 $('#popover-' index).fadeIn('slow', function() {
                    $(this).position({
                        of: elem,
                        my: 'center top',
                        at: 'center bottom',
                        offset: '0 10'
                    });
                });
  

HTML выглядит следующим образом:

 <div id="person-edit-1"  class='popover bottom' style="display:none;">
  <div class="arrow top" style="position: absolute; "></div>
  <div>Content goes here</div>
</div>
  

Метод position не будет позиционировать невидимые элементы, поэтому он не работал, когда я вызывал position перед fadeIn.

Заранее спасибо!

Комментарии:

1. Иногда, если для позиции элемента установлено значение relative fade, это работает некорректно. Как выглядит ваш HTML-код?

2. Я добавил HTML к вопросу. Спасибо!

3. ладно, отбросим эту идею. Сработает ли исчезновение, если временно удалить часть кода .position?

4. Нет. Кажется, не зависит от позиционирования.

5. (Я должен упомянуть, что исчезновение работает позже, когда я закрываю всплывающее окно).

Ответ №1:

Если позиция jquery-ui должна быть видимой, то вам придется ее отобразить, расположить, повторно скрыть, а затем затемнить.

Один из вариантов: вместо использования fadeIn (‘медленный’) вы могли бы расположить элемент, установить непрозрачность в 0, затем анимировать свойство opacity. Это будет работать только в браузерах, которые понимают свойство opacity (не IE):

 $('#popover-'   index).show().position({
  of: elem,
  my: 'center top',
  at: 'center bottom',
  offset: '0 10'
}).css('opacity', '0').animate({'opacity': '1'}, 'slow');
  

Комментарии:

1. Это работает, хотя что произошло бы в IE? Будет ли это просто отображаться, или это будет что-то более неприятное? (У меня нет IE под рукой для тестирования прямо сейчас). Я в порядке, если это просто отображается в IE.

2. На самом деле вы можете вызвать .show().position().hide().fadeIn(), что я в итоге и сделал.