Panel splitter

Все свыклись с тем что на javascript можно делать перетаскиваемые объекты (drag-and-drop), но как и ajax, такой приём имеет узкое применение. В моём случае - это разделитель, aka splitter, ruler, divider как вам угодно.

Все их видели в Outlook и десктопных приложениях, многие баловались frameset-ами в девяностых, но потребность в моём случае всё ещё осталась в админ панелях и приложениях, где свободное место должно легко расширяться.

Первым делом я надумал написать скрипт сам, но подумав - решил поискать существующие решения. Сначала попалось готовое решение splitpane на j-log - слишком громоздкое. Конечно неплохо что после передвижения разделителя можно ajax-ом сохранить новое местоположение, что-бы потом открывать в сохранённом варианте. Также радует что за расчётом ширины объект обращается к родительскому элементу.


Дальше отпали модули для yui и extjs, и я плюнув написал сам для двух div-элементов.

Сначала я создал три абсолютных div-элемента:

#panel {position:absolute;height:99%;width:250px;overflow-y: auto;}
#panel_resize{left:250px;width:3px;cursor:e-resize;height:100%;position:absolute;background:white;z-index:7;}
#content{position:absolute;left:253px;right:5px;height:99%;}

Потом, поскольку я уже использую scriptaculous, я сделал разделитель передвигаемым, и после передвижения написал перерасчёт ширины двух панелей. Конечно такое решение не элегантно при трёх и более панелях, где тоже прийдётся использовать вычисление ширины в зависимости от ширины родительского элемента, но на данный момент сгодится.

 new Draggable('panel_resize',{constraint:'horizontal',onEnd:function(){ 
   $('panel').style.width=$('panel_resize').style.left;
   $('content').style.left=$('panel_resize').style.left;
 }});

RSS