#javascript #mootools
#javascript #mootools
Вопрос:
Всем доброго утра,
Я пытаюсь создать эффект Mootools, чтобы показывать и скрывать ответы на комментарий на доске обсуждения. Когда пользователь нажимает ссылку «ответы» в комментарии, я хочу увеличить высоту контейнера комментариев, а затем уменьшить содержание ответов. Если содержимое ответов уже видно, нажатие на ссылку приведет к обратному эффекту.
У меня это вроде работает, но у меня возникли проблемы с получением правильной высоты моих скрытых элементов (повторяется в моем JS). Я пробовал getDimensions (), measure () и getComputedSize (), но все они дают один и тот же результат: когда для элементов установлено значение display: none, я получаю слишком маленькую высоту; когда я устанавливаю для них значение display:block, высота правильная. Может ли какой-нибудь добрый человек определить, где я ошибаюсь?
http://jsfiddle.net/andfinally/tVBCa/
Приветствую Фреда
=======================
ЧУТЬ ПОЗЖЕ
Только что заметил — ширина контейнера .comments-list, похоже, имеет какое-то отношение к этой проблеме. Когда я удаляю эту ширину, эффект работает нормально. Вероятно, это означает, что getDimensions получает высоту элемента, когда он ни во что не вложен. Кто-нибудь может подсказать, как я могу определить, какой будет высота, когда она вложена?
Приветствую Фреда
Ответ №1:
вы могли бы использовать Fx.Reveal, это очень полезно, когда вы сталкиваетесь с такого рода проблемами, и это значительно упрощает ваш код, т.Е. (я раздвоил ваш пример) => http://jsfiddle.net/steweb/DH27F
Комментарии:
1. О, вау! Спасибо stecb, это делает все намного проще. Для тех, кто интересуется проблемой размеров, похоже, вам нужно задать ширину для скрытого элемента, который вы измеряете, если вы собираетесь вложить его во что-то другое с шириной.
Ответ №2:
Простой способ обойти это:
replies.show();
var repliesH = replies.getDimensions().y;
replies.hide();
Просто покажите это, получите размеры и снова скройте. Это выполняется так быстро, что ни один из них не виден пользователю.
Ваша обновленная скрипка здесь.
Комментарии:
1. Большое спасибо, Эрик! Это еще один хороший способ обойти проблему.