Skip to content

Instantly share code, notes, and snippets.

@jstott
Forked from evanlarsen/transitionHelper.js
Last active December 3, 2018 16:13
Show Gist options
  • Select an option

  • Save jstott/6326038 to your computer and use it in GitHub Desktop.

Select an option

Save jstott/6326038 to your computer and use it in GitHub Desktop.
define(['durandal/system', './transitionHelper'], function(system, helper) {
var settings = {
inAnimation: 'fadeInLeftBig',
outAnimation: 'fadeOutRight'
},
fadeIn = function(context) {
system.extend(context, settings);
return helper.create(context);
};
return fadeIn;
});
define(['durandal/system', 'jquery'], function (system, $) {
var animationTypes = [
'bounce',
'bounceIn',
'bounceInDown',
'bounceInLeft',
'bounceInRight',
'bounceInUp',
'bounceOut',
'bounceOutDown',
'bounceOutLeft',
'bounceOutRight',
'bounceOutUp',
'fadeIn',
'fadeInDown',
'fadeInDownBig',
'fadeInLeft',
'fadeInLeftBig',
'fadeInRight',
'fadeInRightBig',
'fadeInUp',
'fadeInUpBig',
'fadeOut',
'fadeOutDown',
'fadeOutDownBig',
'fadeOutLeft',
'fadeOutLeftBig',
'fadeOutRight',
'fadeOutRightBig',
'fadeOutUp',
'fadeOutUpBig',
'flash',
'flip',
'flipInX',
'flipInY',
'flipOutX',
'flipOutY',
'hinge',
'lightSpeedIn',
'lightSpeedOut',
'pulse',
'rollIn',
'rollOut',
'rotateIn',
'rotateInDownLeft',
'rotateInDownRight',
'rotateInUpLeft',
'rotateInUpRight',
'rotateOut',
'rotateOutDownLeft',
'rotateOutDownRight',
'rotateOutUpLeft',
'roateOutUpRight',
'shake',
'swing',
'tada',
'wiggle',
'wobble'
];
return App = {
duration: 1000 * .35, // seconds
create: function (settings) {
settings = ensureSettings(settings);
return doTrans(settings);
}
};
function animValue(type) {
return Object.prototype.toString.call(type) == '[object String]' ? type : animationTypes[type];
}
function ensureSettings(settings) {
settings.inAnimation = settings.inAnimation || 'fadeInRight';
settings.outAnimation = settings.outAnimation || 'fadeOut';
return settings;
}
function doTrans(settings) {
var activeView = settings.activeView,
newChild = settings.child,
outAn = animValue(settings.outAnimation),
inAn = animValue(settings.inAnimation),
$previousView,
$newView = $(newChild).removeClass([outAn, inAn]).addClass('animated');
return system.defer(function (dfd) {
if (newChild) {
startTransition();
} else {
endTransistion();
}
function startTransition() {
if (settings.activeView) {
outTransition(inTransition);
} else {
inTransition();
}
}
function outTransition(callback) {
$previousView = $(activeView);
$previousView.addClass('animated');
$previousView.addClass(outAn);
setTimeout(function () {
if (callback) {
callback();
endTransistion();
}
}, App.duration);
}
function inTransition() {
settings.triggerAttach();
$newView.css('display', '');
$newView.addClass(inAn);
setTimeout(function () {
$newView.removeClass(inAn + ' ' + outAn + ' animated');
endTransistion();
}, App.duration);
}
function endTransistion() {
dfd.resolve();
}
}).promise();
}
});
@bestguy
Copy link
Copy Markdown

bestguy commented Jun 2, 2014

@jiggle - Thanks for this, works great! Thanks all for the samples here.

@sreerajeferns
Copy link
Copy Markdown

How do I apply a transition to a particular element rather than the whole document ?

@ShamanSC
Copy link
Copy Markdown

ShamanSC commented Apr 5, 2016

This is great thanks!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment