impressive 3d support, yeah!
This commit is contained in:
@@ -52,9 +52,21 @@
|
|||||||
return [].slice.call( context.querySelectorAll(selector) );
|
return [].slice.call( context.querySelectorAll(selector) );
|
||||||
};
|
};
|
||||||
|
|
||||||
var translate = function (x,y) { return " translate3d(" + x + "px," + y + "px, 0) "; }
|
var translate = function ( t ) {
|
||||||
var rotate = function (a) { return " rotate(" + a + "deg) "; }
|
return " translate3d(" + t.x + "px," + t.y + "px," + t.z + "px) ";
|
||||||
var scale = function (s) { return " scale(" + s + ") "; }
|
};
|
||||||
|
|
||||||
|
var rotate = function ( r, revert ) {
|
||||||
|
var rX = " rotateX(" + r.x + "deg) ",
|
||||||
|
rY = " rotateY(" + r.y + "deg) ",
|
||||||
|
rZ = " rotatez(" + r.z + "deg) ";
|
||||||
|
|
||||||
|
return revert ? rZ+rY+rX : rX+rY+rZ;
|
||||||
|
};
|
||||||
|
|
||||||
|
var scale = function ( s ) {
|
||||||
|
return " scaleX(" + s.x + ") scaleY(" + s.y + ") scaleZ(" + s.z + ") ";
|
||||||
|
}
|
||||||
|
|
||||||
// DOM ELEMENTS
|
// DOM ELEMENTS
|
||||||
|
|
||||||
@@ -75,29 +87,46 @@
|
|||||||
|
|
||||||
var props = {
|
var props = {
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: "50%",
|
|
||||||
left: "50%",
|
|
||||||
transformOrigin: "top left",
|
transformOrigin: "top left",
|
||||||
transition: "all 1s ease-in-out"
|
transition: "all 1s ease-in-out",
|
||||||
|
transformStyle: "preserve-3d"
|
||||||
}
|
}
|
||||||
|
|
||||||
css(impress, props);
|
css(impress, props);
|
||||||
|
css(impress, {
|
||||||
|
top: "50%",
|
||||||
|
left: "50%",
|
||||||
|
perspective: "1000px"
|
||||||
|
});
|
||||||
css(canvas, props);
|
css(canvas, props);
|
||||||
|
|
||||||
var current = {
|
var current = {
|
||||||
x: 0,
|
translate: { x: 0, y: 0, z: 0 },
|
||||||
y: 0,
|
rotate: { x: 0, y: 0, z: 0 },
|
||||||
rotate: 0,
|
scale: { x: 1, y: 1, z: 1 }
|
||||||
scale: 1
|
|
||||||
};
|
};
|
||||||
|
|
||||||
steps.forEach(function ( el, idx ) {
|
steps.forEach(function ( el, idx ) {
|
||||||
var step = el.dataset;
|
var data = el.dataset,
|
||||||
|
step = {
|
||||||
|
translate: {
|
||||||
|
x: data.x || 0,
|
||||||
|
y: data.y || 0,
|
||||||
|
z: data.z || 0
|
||||||
|
},
|
||||||
|
rotate: {
|
||||||
|
x: data.rotateX || 0,
|
||||||
|
y: data.rotateY || 0,
|
||||||
|
z: data.rotateZ || data.rotate || 0
|
||||||
|
},
|
||||||
|
scale: {
|
||||||
|
x: data.scaleX || data.scale || 1,
|
||||||
|
y: data.scaleY || data.scale || 1,
|
||||||
|
z: data.scaleZ || 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
step.x = step.x || 0;
|
el.stepData = step;
|
||||||
step.y = step.y || 0;
|
|
||||||
step.rotate = step.rotate || 0;
|
|
||||||
step.scale = step.scale || 1;
|
|
||||||
|
|
||||||
if ( !el.id ) {
|
if ( !el.id ) {
|
||||||
el.id = "step-" + idx;
|
el.id = "step-" + idx;
|
||||||
@@ -106,7 +135,7 @@
|
|||||||
css(el, {
|
css(el, {
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
transform: "translate(-50%,-50%)" +
|
transform: "translate(-50%,-50%)" +
|
||||||
translate(step.x, step.y) +
|
translate(step.translate) +
|
||||||
rotate(step.rotate) +
|
rotate(step.rotate) +
|
||||||
scale(step.scale)
|
scale(step.scale)
|
||||||
});
|
});
|
||||||
@@ -116,7 +145,7 @@
|
|||||||
// making given step active
|
// making given step active
|
||||||
|
|
||||||
var select = function ( el ) {
|
var select = function ( el ) {
|
||||||
var step = el.dataset;
|
var step = el.stepData;
|
||||||
|
|
||||||
if ( $(".step.active", impress) ) {
|
if ( $(".step.active", impress) ) {
|
||||||
$(".step.active", impress).classList.remove("active");
|
$(".step.active", impress).classList.remove("active");
|
||||||
@@ -126,20 +155,35 @@
|
|||||||
impress.className = "step-" + el.id;
|
impress.className = "step-" + el.id;
|
||||||
|
|
||||||
var target = {
|
var target = {
|
||||||
rotate: -parseInt(step.rotate, 10),
|
rotate: {
|
||||||
scale: 1 / parseFloat(step.scale),
|
x: -parseInt(step.rotate.x, 10),
|
||||||
x: -step.x,
|
y: -parseInt(step.rotate.y, 10),
|
||||||
y: -step.y
|
z: -parseInt(step.rotate.z, 10),
|
||||||
|
},
|
||||||
|
scale: {
|
||||||
|
x: 1 / parseFloat(step.scale.x),
|
||||||
|
y: 1 / parseFloat(step.scale.y),
|
||||||
|
z: 1 / parseFloat(step.scale.z),
|
||||||
|
},
|
||||||
|
translate: {
|
||||||
|
x: -step.translate.x,
|
||||||
|
y: -step.translate.y,
|
||||||
|
z: -step.translate.z
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var zoomin = target.scale.x > current.scale.x ||
|
||||||
|
target.scale.y > current.scale.y ||
|
||||||
|
target.scale.z > current.scale.z;
|
||||||
|
|
||||||
css(impress, {
|
css(impress, {
|
||||||
transform: scale(target.scale),
|
transform: scale(target.scale),
|
||||||
transitionDelay: (target.scale > current.scale ? "300ms" : "0")
|
transitionDelay: (zoomin ? "300ms" : "0")
|
||||||
});
|
});
|
||||||
|
|
||||||
css(canvas, {
|
css(canvas, {
|
||||||
transform: rotate(target.rotate) + translate(target.x, target.y),
|
transform: rotate(target.rotate, true) + translate(target.translate),
|
||||||
transformDelay: (target.scale > current.scale ? "0" : "300ms")
|
transformDelay: (zoomin ? "0" : "300ms")
|
||||||
});
|
});
|
||||||
|
|
||||||
current = target;
|
current = target;
|
||||||
|
|||||||
Reference in New Issue
Block a user