Я реализовал ngAnimate в проекте, чтобы помочь с анимацией, но я получаю действительно странное поведение с определенным элементом.ngAnimate max-height не работает над определенным элементом
Чтобы добавить фон, у нас есть магазин с категориями и продуктами внутри категорий. Я делаю ng-repeat с: data-ng-repeat="product in currentProductCategory.Products"
, и у меня есть data-ng-class="{ 'open': product.ShowDetails == true }"
на моем корневом элементе.
Мой корневой элемент также имеет идентификатор product-{{product.Id}}-{{currentProductCategory.Id}}
, и у меня есть дочерний элемент с идентификатором product-options-{{product.Id}}-{{currentProductCategory.Id}}
, результаты которого ожидаются.
При нажатии кнопки я вызываю функцию, которая устанавливает максимальную высоту на родительском элементе на нужную высоту, а анимация обрабатывается в CSS. Вот код функции:
var reg = /\d+/g;
var productParentElement = $('#product-' + product.Id + '-' + $scope.currentProductCategory.Id);
var optionsElement = $('#product-options-' + product.Id + '-' + $scope.currentProductCategory.Id);
var productParentPaddingTop = parseInt(productParentElement.css("padding-top").match(reg));
var productParentPaddingBottom = parseInt(productParentElement.css("padding-bottom").match(reg));
var productParentTotalHeight = productParentPaddingTop + productParentPaddingBottom + productParentElement.height() + optionsElement.height();
var optionsElementPaddingTop = parseInt(optionsElement.css("padding-top").match(reg));
var optionsElementPaddingBottom = parseInt(optionsElement.css("padding-bottom").match(reg));
var optionsElementTotalHeight = optionsElementPaddingTop + optionsElementPaddingBottom + optionsElement.height();
var totalHeight = productParentTotalHeight + optionsElementTotalHeight;
if (product.ShowDetails) {
product.ShowDetails = true;
productParentElement.css("max-height", totalHeight);
} else {
product.ShowDetails = false;
productParentElement.removeAttr('style');
}
И мой CSS для закрытых и открытых классов:
Закрыто:
.products-list .product {
margin-bottom: 20px;
max-height: 200px;
overflow: hidden;
-moz-transition: max-height 2s ease;
-o-transition: max-height 2s ease;
-webkit-transition: max-height 2s ease;
transition: max-height 2s ease;
}
Open:
.products-list .product.open {
-moz-transition: max-height 2s ease;
-o-transition: max-height 2s ease;
-webkit-transition: max-height 2s ease;
transition: max-height 2s ease;
max-height: 200px;
}
Проблема в том, что из многие продукты более чем в 4 категориях, то же самое, что является одним и тем же продуктом в каждой категории, не оживляет открытость. Он оживляет закрытие/сжатие, но при открытии он сразу же открывается.
Это долгое время строит нас, и это становится реальной проблемой, любая помощь очень ценится.
ОБНОВЛЕНИЕ: Теперь ни один из «продуктов» не будет анимировать, но они ожидают закрытия. Может ли это быть потому, что я устанавливаю максимальную высоту в стиле, а не в классе?
Только для разъяснения - вы говорите, что только один из типов продуктов в каждой категории не анимируется правильно, но все остальные типы продуктов в категории оживляют? –
Это правильно! Помимо значений свойств на разных объектах (как они были бы), данные для них все точно совпадают. Есть один «продукт», который имеет ту же проблему во всех категориях. Например: JPEG (нарушитель) является продуктом в трех категориях. В каждой категории есть объект _own_ JPEG, они не ссылаются на один и тот же. Но все 3 JPEG-продукта отказываются анимировать –
Здесь для меня не хватает кода, чтобы дать вам окончательный ответ, поскольку я бы немного угадал, но я бы сосредоточился на том, что свойственно проблемному продукту. Всегда ли оно отображается в том же положении в списке или есть другое свойство, которое имеет продукт проблемы, что другие продукты не имеют? –