| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /**
- * 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;
- });
|