Как в jQuery реализован функционал SlideUp и SlideDown?
Хочу его написать на javascript.
Имеется рабочий код на jQuery, при нажатии раскрывается и сворачивается списокjQuery(document).ready(function(){
var accordionsMenu = $('.cd-accordion-menu');
if( accordionsMenu.length > 0 ) {
accordionsMenu.each(function(){
var accordion = $(this);
accordion.on('change', 'input[type="checkbox"]', function(){
var checkbox = $(this);
console.log(checkbox.prop('checked'));
( checkbox.prop('checked') ) ? checkbox.siblings('ul').attr('style', 'display:none;').slideDown(300) : checkbox.siblings('ul').attr('style', 'display:block;').slideUp(300);
});
});
}
});
Сейчас сворачивание реализовал так, первоначально задаю css max-height: 0
.sub-menu { overflow: hidden; max-height: 0; transition: all .4s ease-out; }
Затем меняю это значение на max-height: 999px после чего меню разворачивается.
Высоту блока можно узнать как element.scrollHeight, но тут есть нюанс что в блоке есть еще одно раскрывающее меню, но element.scrollHeight, его не учитывает. В итоге родительский элемент не дает развернуться дочернему, так как не хватает высоты.
Почему меня это волнует: Нужна гибкость, вдруг элементы не войдут в 999px, могу задать 9999px, но тогда имею задержку в сворачивании, так как высота большая долго сворачивается, сейчас более менее подогнал через css, но хочется сделать правильно.
Можно конечно при разворачивании элемента поменять высоту родительского элемента, но при большой вложенности это как-то...
Как это реализовано на jQuery, я про SlideUp/SlideDown?