Ответ по запросу.
Пожалуйста, смотрите скрипку для более подробной информации.
(моя текущая версия использует 2d-преобразования. Я сделал это до того, как нашел этот вопрос)
это может помочь, хотя ..
http://jsfiddle.net/pixelass/a74Eu/32/
Я работаю над плагином jQuery для этого.
мой текущий jQuery (пожалуйста, посмотрите на скрипку)
$(document).ready(function() {
var button = $('button#folder'),
buttonSet = $('button#setter'),
fold = $('.wrapper'),
odd = $('.wrapper .part:nth-child(1)'),
even = $('.wrapper .part:nth-child(2)'),
gVal = $('input.perc').attr('value') / 25,
hVal = $('input.heig').attr('value'),
shadHeight = hVal / 2,
closed = false;
buttonSet.click(function() {
gVal = $('input.perc').attr('value') / 25;
hVal = $('input.heig').attr('value');
fold.find('.part').css('height',hVal + 'px');
shadHeight = hVal / 2;
});
button.click(function() {
var rePos = hVal / 4 * gVal,
rePosWrap = rePos * 2,
newDeg = 90 / 4 * gVal,
newScal = 1 - (1 / 4 * gVal);
if (closed) {
button.text('fold');
fold.css('-webkit-transform', 'translateY(0px) translateX(0px)');
odd.css('-webkit-transform', 'skewX(0deg) scaleY(1)').css('box-shadow','-4px 4px 4px rgba(0,0,0,0.2), 0 0 0 rgba(0,0,0,0) inset, 0 0 0 rgba(0,0,0,0) inset');
even.css('-webkit-transform', 'skewX(0deg) scaleY(1)').css('box-shadow','-4px 4px 4px rgba(0,0,0,0.2), 0 0 0 rgba(0,0,0,0) inset, 0 0 0 rgba(0,0,0,0) inset');
$(".partwrap").each(function() {
$(this).css('-webkit-transform', 'translateY(0px)');
});
fold.toggleClass('close');
closed = false;
} else {
button.text('unfold');
fold.css('-webkit-transform', 'translateY(-' + rePos + 'px) translateX(' + rePos + 'px)');
odd.css('-webkit-transform', 'skewX(' + newDeg + 'deg) scaleY(' + newScal + ')').css('box-shadow','-4px 4px 8px rgba(0,0,0,0.2), 0 ' + shadHeight + 'px ' + shadHeight + 'px rgba(111,111,111,0.2) inset, 0 -' + shadHeight + 'px ' + shadHeight + 'px rgba(255,255,255,0.2) inset');
even.css('-webkit-transform', 'skewX(-' + newDeg + 'deg) scaleY(' + newScal + ')').css('box-shadow','-4px 4px 8px rgba(0,0,0,0.2), 0 ' + shadHeight + 'px ' + shadHeight + 'px rgba(111,111,111,0.2) inset, 0 -' + shadHeight + 'px ' + shadHeight + 'px rgba(0,0,0,0.2) inset');
$(".partwrap").each(function() {
var goUp = $(".partwrap").index(this) * rePosWrap;
$(this).css('-webkit-transform', 'translateY(-' + goUp + 'px)');
});
fold.toggleClass('close');
closed = true;
console.log('-webkit-transform', 'skewX(' + newDeg + 'deg) scaleY(' + newScal + ')');
}
});
});