mirror of
https://github.com/Febbweiss/febbweiss.github.io.git
synced 2026-03-05 14:45:43 +00:00
140 lines
4.4 KiB
JavaScript
140 lines
4.4 KiB
JavaScript
/**
|
|
* Durandal 2.1.0 Copyright (c) 2012 Blue Spire Consulting, Inc. All Rights Reserved.
|
|
* Available via the MIT license.
|
|
* see: http://durandaljs.com or https://github.com/BlueSpire/Durandal for details.
|
|
*/
|
|
/**
|
|
* The entrance transition module.
|
|
* @module entrance
|
|
* @requires system
|
|
* @requires composition
|
|
* @requires jquery
|
|
*/
|
|
define(['durandal/system', 'durandal/composition', 'jquery'], function(system, composition, $) {
|
|
var fadeOutDuration = 100;
|
|
var endValues = {
|
|
left: '0px',
|
|
opacity: 1
|
|
};
|
|
var clearValues = {
|
|
left: '',
|
|
top: '',
|
|
right: '',
|
|
bottom:'',
|
|
position:'',
|
|
opacity: ''
|
|
};
|
|
|
|
var isIE = navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/MSIE/);
|
|
|
|
var animation = false,
|
|
domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
|
|
elm = document.createElement('div');
|
|
|
|
if(elm.style.animationName !== undefined) {
|
|
animation = true;
|
|
}
|
|
|
|
if(!animation) {
|
|
for(var i = 0; i < domPrefixes.length; i++) {
|
|
if(elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
|
|
animation = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(animation) {
|
|
if(isIE){
|
|
system.log('Using CSS3/jQuery mixed animations.');
|
|
}else{
|
|
system.log('Using CSS3 animations.');
|
|
}
|
|
} else {
|
|
system.log('Using jQuery animations.');
|
|
}
|
|
|
|
function removeAnimationClasses(ele, fadeOnly){
|
|
ele.classList.remove(fadeOnly ? 'entrance-in-fade' : 'entrance-in');
|
|
ele.classList.remove('entrance-out');
|
|
}
|
|
|
|
/**
|
|
* @class EntranceModule
|
|
* @constructor
|
|
*/
|
|
var entrance = function(context) {
|
|
return system.defer(function(dfd) {
|
|
function endTransition() {
|
|
dfd.resolve();
|
|
}
|
|
|
|
function scrollIfNeeded() {
|
|
if (!context.keepScrollPosition) {
|
|
$(document).scrollTop(0);
|
|
}
|
|
}
|
|
|
|
if (!context.child) {
|
|
$(context.activeView).fadeOut(fadeOutDuration, endTransition);
|
|
} else {
|
|
var duration = context.duration || 500;
|
|
var $child = $(context.child);
|
|
var fadeOnly = !!context.fadeOnly;
|
|
var startValues = {
|
|
display: 'block',
|
|
opacity: 0,
|
|
position: 'absolute',
|
|
left: fadeOnly || animation ? '0px' : '20px',
|
|
right: 0,
|
|
top: 0,
|
|
bottom: 0
|
|
};
|
|
|
|
function startTransition() {
|
|
scrollIfNeeded();
|
|
context.triggerAttach();
|
|
|
|
if (animation) {
|
|
removeAnimationClasses(context.child, fadeOnly);
|
|
context.child.classList.add(fadeOnly ? 'entrance-in-fade' : 'entrance-in');
|
|
setTimeout(function () {
|
|
removeAnimationClasses(context.child, fadeOnly);
|
|
if(context.activeView){
|
|
removeAnimationClasses(context.activeView, fadeOnly);
|
|
}
|
|
$child.css(clearValues);
|
|
endTransition();
|
|
}, duration);
|
|
} else {
|
|
$child.animate(endValues, {
|
|
duration: duration,
|
|
easing: 'swing',
|
|
always: function() {
|
|
$child.css(clearValues);
|
|
endTransition();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
$child.css(startValues);
|
|
|
|
if(context.activeView) {
|
|
if (animation && !isIE) {
|
|
removeAnimationClasses(context.activeView, fadeOnly);
|
|
context.activeView.classList.add('entrance-out');
|
|
setTimeout(startTransition, fadeOutDuration);
|
|
} else {
|
|
$(context.activeView).fadeOut({ duration: fadeOutDuration, always: startTransition });
|
|
}
|
|
} else {
|
|
startTransition();
|
|
}
|
|
}
|
|
}).promise();
|
|
};
|
|
|
|
return entrance;
|
|
});
|