|
|
@ -14,6 +14,7 @@ |
|
|
|
$.fn.shape = function(parameters) { |
|
|
|
var |
|
|
|
$allModules = $(this), |
|
|
|
$body = $('body'), |
|
|
|
|
|
|
|
time = new Date().getTime(), |
|
|
|
performance = [], |
|
|
@ -46,6 +47,7 @@ $.fn.shape = function(parameters) { |
|
|
|
$side = $module.find(selector.side), |
|
|
|
|
|
|
|
// private variables
|
|
|
|
nextSelector = false, |
|
|
|
$activeSide, |
|
|
|
$nextSide, |
|
|
|
|
|
|
@ -104,46 +106,26 @@ $.fn.shape = function(parameters) { |
|
|
|
module.reset(); |
|
|
|
module.set.active(); |
|
|
|
}; |
|
|
|
if(settings.useCSS) { |
|
|
|
if(module.get.transitionEvent()) { |
|
|
|
module.verbose('Starting CSS animation'); |
|
|
|
$module |
|
|
|
.addClass(className.animating) |
|
|
|
; |
|
|
|
module.set.stageSize(); |
|
|
|
module.repaint(); |
|
|
|
$module |
|
|
|
.addClass(className.css) |
|
|
|
; |
|
|
|
$activeSide |
|
|
|
.addClass(className.hidden) |
|
|
|
; |
|
|
|
$sides |
|
|
|
.css(propertyObject) |
|
|
|
.one(module.get.transitionEvent(), callback) |
|
|
|
; |
|
|
|
} |
|
|
|
else { |
|
|
|
callback(); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
// not yet supported until .animate() is extended to allow RotateX/Y
|
|
|
|
module.verbose('Starting javascript animation'); |
|
|
|
if(module.get.transitionEvent()) { |
|
|
|
module.verbose('Starting CSS animation'); |
|
|
|
$module |
|
|
|
.addClass(className.animating) |
|
|
|
.removeClass(className.css) |
|
|
|
; |
|
|
|
module.set.stageSize(); |
|
|
|
module.repaint(); |
|
|
|
$module |
|
|
|
.addClass(className.animating) |
|
|
|
; |
|
|
|
$activeSide |
|
|
|
.animate({ |
|
|
|
opacity: 0 |
|
|
|
}, settings.duration, settings.easing) |
|
|
|
.addClass(className.hidden) |
|
|
|
; |
|
|
|
$sides |
|
|
|
.animate(propertyObject, settings.duration, settings.easing, callback) |
|
|
|
.css(propertyObject) |
|
|
|
.one(module.get.transitionEvent(), callback) |
|
|
|
; |
|
|
|
module.set.duration(settings.duration); |
|
|
|
} |
|
|
|
else { |
|
|
|
callback(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
@ -162,7 +144,6 @@ $.fn.shape = function(parameters) { |
|
|
|
reset: function() { |
|
|
|
module.verbose('Animating states reset'); |
|
|
|
$module |
|
|
|
.removeClass(className.css) |
|
|
|
.removeClass(className.animating) |
|
|
|
.attr('style', '') |
|
|
|
.removeAttr('style') |
|
|
@ -190,107 +171,6 @@ $.fn.shape = function(parameters) { |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
get: { |
|
|
|
|
|
|
|
transform: { |
|
|
|
up: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2), |
|
|
|
z: -($activeSide.outerHeight() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
down: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2), |
|
|
|
z: -($activeSide.outerHeight() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
left: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2), |
|
|
|
z : -($activeSide.outerWidth() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
right: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2), |
|
|
|
z : -($activeSide.outerWidth() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
over: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) rotateY(180deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
back: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
transitionEvent: function() { |
|
|
|
var |
|
|
|
element = document.createElement('element'), |
|
|
|
transitions = { |
|
|
|
'transition' :'transitionend', |
|
|
|
'OTransition' :'oTransitionEnd', |
|
|
|
'MozTransition' :'transitionend', |
|
|
|
'WebkitTransition' :'webkitTransitionEnd' |
|
|
|
}, |
|
|
|
transition |
|
|
|
; |
|
|
|
for(transition in transitions){ |
|
|
|
if( element.style[transition] !== undefined ){ |
|
|
|
return transitions[transition]; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
nextSide: function() { |
|
|
|
return ( $activeSide.next(selector.side).size() > 0 ) |
|
|
|
? $activeSide.next(selector.side) |
|
|
|
: $module.find(selector.side).first() |
|
|
|
; |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
set: { |
|
|
|
|
|
|
|
defaultSide: function() { |
|
|
@ -299,27 +179,56 @@ $.fn.shape = function(parameters) { |
|
|
|
? $activeSide.next(selector.side) |
|
|
|
: $module.find(selector.side).first() |
|
|
|
; |
|
|
|
nextSelector = false; |
|
|
|
module.verbose('Active side set to', $activeSide); |
|
|
|
module.verbose('Next side set to', $nextSide); |
|
|
|
}, |
|
|
|
|
|
|
|
duration: function(duration) { |
|
|
|
duration = duration || settings.duration; |
|
|
|
duration = (typeof duration == 'number') |
|
|
|
? duration + 'ms' |
|
|
|
: duration |
|
|
|
; |
|
|
|
module.verbose('Setting animation duration', duration); |
|
|
|
$sides.add($side) |
|
|
|
.css({ |
|
|
|
'-webkit-transition-duration': duration, |
|
|
|
'-moz-transition-duration': duration, |
|
|
|
'-ms-transition-duration': duration, |
|
|
|
'-o-transition-duration': duration, |
|
|
|
'transition-duration': duration |
|
|
|
}) |
|
|
|
; |
|
|
|
}, |
|
|
|
|
|
|
|
stageSize: function() { |
|
|
|
var |
|
|
|
stage = { |
|
|
|
width : $nextSide.outerWidth(), |
|
|
|
height : $nextSide.outerHeight() |
|
|
|
} |
|
|
|
$clone = $module.clone().addClass(className.loading), |
|
|
|
$activeSide = $clone.find('.' + settings.className.active), |
|
|
|
$nextSide = (nextSelector) |
|
|
|
? $clone.find(nextSelector) |
|
|
|
: ( $activeSide.next(selector.side).size() > 0 ) |
|
|
|
? $activeSide.next(selector.side) |
|
|
|
: $clone.find(selector.side).first(), |
|
|
|
newSize = {} |
|
|
|
; |
|
|
|
module.verbose('Resizing stage to fit new content', stage); |
|
|
|
$activeSide.removeClass(className.active); |
|
|
|
$nextSide.addClass(className.active); |
|
|
|
$clone.prependTo($body); |
|
|
|
newSize = { |
|
|
|
width : $nextSide.outerWidth(), |
|
|
|
height : $nextSide.outerHeight() |
|
|
|
}; |
|
|
|
$clone.remove(); |
|
|
|
$module |
|
|
|
.css({ |
|
|
|
width : stage.width, |
|
|
|
height : stage.height |
|
|
|
}) |
|
|
|
.css(newSize) |
|
|
|
; |
|
|
|
module.verbose('Resizing stage to fit new content', newSize); |
|
|
|
}, |
|
|
|
|
|
|
|
nextSide: function(selector) { |
|
|
|
nextSelector = selector; |
|
|
|
$nextSide = $module.find(selector); |
|
|
|
if($nextSide.size() === 0) { |
|
|
|
module.error(error.side); |
|
|
@ -345,6 +254,7 @@ $.fn.shape = function(parameters) { |
|
|
|
up: function() { |
|
|
|
module.debug('Flipping up', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.above(); |
|
|
|
module.animate( module.get.transform.up() ); |
|
|
|
} |
|
|
@ -356,6 +266,7 @@ $.fn.shape = function(parameters) { |
|
|
|
down: function() { |
|
|
|
module.debug('Flipping down', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.below(); |
|
|
|
module.animate( module.get.transform.down() ); |
|
|
|
} |
|
|
@ -367,6 +278,7 @@ $.fn.shape = function(parameters) { |
|
|
|
left: function() { |
|
|
|
module.debug('Flipping left', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.left(); |
|
|
|
module.animate(module.get.transform.left() ); |
|
|
|
} |
|
|
@ -378,6 +290,7 @@ $.fn.shape = function(parameters) { |
|
|
|
right: function() { |
|
|
|
module.debug('Flipping right', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.right(); |
|
|
|
module.animate(module.get.transform.right() ); |
|
|
|
} |
|
|
@ -389,6 +302,7 @@ $.fn.shape = function(parameters) { |
|
|
|
over: function() { |
|
|
|
module.debug('Flipping over', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.behind(); |
|
|
|
module.animate(module.get.transform.over() ); |
|
|
|
} |
|
|
@ -400,6 +314,7 @@ $.fn.shape = function(parameters) { |
|
|
|
back: function() { |
|
|
|
module.debug('Flipping back', $nextSide); |
|
|
|
if( !module.is.animating() ) { |
|
|
|
module.set.stageSize(); |
|
|
|
module.stage.behind(); |
|
|
|
module.animate(module.get.transform.back() ); |
|
|
|
} |
|
|
@ -410,6 +325,107 @@ $.fn.shape = function(parameters) { |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
get: { |
|
|
|
|
|
|
|
transform: { |
|
|
|
up: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2), |
|
|
|
z: -($activeSide.outerHeight() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
down: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2), |
|
|
|
z: -($activeSide.outerHeight() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
left: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2), |
|
|
|
z : -($activeSide.outerWidth() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
right: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2), |
|
|
|
z : -($activeSide.outerWidth() / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
over: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) rotateY(180deg)' |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
back: function() { |
|
|
|
var |
|
|
|
translate = { |
|
|
|
x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2) |
|
|
|
} |
|
|
|
; |
|
|
|
return { |
|
|
|
transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
transitionEvent: function() { |
|
|
|
var |
|
|
|
element = document.createElement('element'), |
|
|
|
transitions = { |
|
|
|
'transition' :'transitionend', |
|
|
|
'OTransition' :'oTransitionEnd', |
|
|
|
'MozTransition' :'transitionend', |
|
|
|
'WebkitTransition' :'webkitTransitionEnd' |
|
|
|
}, |
|
|
|
transition |
|
|
|
; |
|
|
|
for(transition in transitions){ |
|
|
|
if( element.style[transition] !== undefined ){ |
|
|
|
return transitions[transition]; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
nextSide: function() { |
|
|
|
return ( $activeSide.next(selector.side).size() > 0 ) |
|
|
|
? $activeSide.next(selector.side) |
|
|
|
: $module.find(selector.side).first() |
|
|
|
; |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
stage: { |
|
|
|
|
|
|
|
above: function() { |
|
|
@ -738,15 +754,10 @@ $.fn.shape.settings = { |
|
|
|
namespace : 'shape', |
|
|
|
|
|
|
|
// callback occurs on side change
|
|
|
|
beforeChange : function() {}, |
|
|
|
onChange : function() {}, |
|
|
|
|
|
|
|
// use css animation (currently only true is supported)
|
|
|
|
useCSS : true, |
|
|
|
|
|
|
|
// animation duration (useful only with future js animations)
|
|
|
|
duration : 1000, |
|
|
|
easing : 'easeInOutQuad', |
|
|
|
// animation duration
|
|
|
|
duration : 700, |
|
|
|
|
|
|
|
// possible errors
|
|
|
|
error: { |
|
|
@ -756,9 +767,9 @@ $.fn.shape.settings = { |
|
|
|
|
|
|
|
// classnames used
|
|
|
|
className : { |
|
|
|
css : 'css', |
|
|
|
animating : 'animating', |
|
|
|
hidden : 'hidden', |
|
|
|
loading : 'loading', |
|
|
|
active : 'active' |
|
|
|
}, |
|
|
|
|
|
|
|