Skip to content

Commit

Permalink
transition end event linealization
Browse files Browse the repository at this point in the history
  • Loading branch information
darielnoel committed Apr 29, 2014
1 parent 5146786 commit 8c1e322
Show file tree
Hide file tree
Showing 6 changed files with 223 additions and 55 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
node_modules
README
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,27 @@ TODO: Write usage instructions

## History

TODO: Write history
**Version 0.1.0**

- Crear una animacion de forma declarativa.
- Definir un evento desencadenador de la animación(when).
- Definir los nodos desde donde se escuchará el evento desencadenador(where).
- Definir un blanco para la animación.(what)
- Definir la manera en que ejecutará la animación.(how)
- Ejecutar una función antes de la animación, y poder deternerla.
- Ejecutar una función cuando se termine la animación.
- En cada animacion se podrá definir cuales son los objetos que serán los propietarios de sus funciones de retorno. (Llamados helpers.)

- Ejecutar AniJS desde cualquier parte del documento.
- Limpiar las animaciones asociadas a un nodo determinado.
- Registrar nuevos ayudantes.
- Agregar nuevas funciones a determinado ayudante.
- Crear una animación de manera no declarativa.
- Linealización del evento animationEnd.
- Linealización del evento transitionEnd.
- Poder escuchar eventos del window object.
- Escuchar eventos del document object.


## Credits

Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@
],
"dependencies": {
}
}
}sadsad
2 changes: 1 addition & 1 deletion dist/anijs-min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

209 changes: 166 additions & 43 deletions dist/anijs.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ var AniJSLib = function(){
var instance = this,
ANIJS_DATATAG_NAME = 'data-anijs',
DEFAULT = 'default',
BODY = 'body';
BODY = 'body',
ANIMATED = ' animated';

/**
* Initializer Function
Expand Down Expand Up @@ -131,13 +132,7 @@ var AniJSLib = function(){
instance._setupElementSentenceAnim = function (element, aniJSParsedSentence) {
var definition,
when = instance._whenHelper(element, aniJSParsedSentence),
whereList = instance._whereHelper(element, aniJSParsedSentence),
whatList = instance._whatHelper(element, aniJSParsedSentence),
how = instance._howHelper(element, aniJSParsedSentence),
after = instance._afterHelper(element, aniJSParsedSentence),
helper = instance._helperHelper(element, aniJSParsedSentence);

how += ' animated';
whereList = instance._whereHelper(element, aniJSParsedSentence);

//Es obligatorio definir de where ATTR
if(when !== ''){
Expand All @@ -149,37 +144,35 @@ var AniJSLib = function(){
whereItem = whereList[i];

var listener = function(event){
//Para cada nodo target se le pone la animacion
var whatListSize = whatList.length,
j = 0;

for ( j; j < whatListSize; j++) {
whatListItem = whatList[j];

NodeHelper.addClass(whatListItem, how);

// create event
whatListItem.addEventListener(instance.animationEndEvent, function(e) {

// remove event
e.target.removeEventListener(e.type, arguments.callee);

//TODO: Could be necesary remove the class after animation finish?
// maybe we can specify this by configuration option
NodeHelper.removeClass(e.target, how);

// callback handler
if (after) {
var helperCollection = instance.helperCollection,
helperInstance = helperCollection[helper];

if (helperInstance && helperInstance[after]) {
return helperInstance[after](e);
}
}

});

//Si cambia algun parametro dinamicamente entonces hay que enterarse
var whatList = instance._whatHelper(element, aniJSParsedSentence),
how = instance._howHelper(element, aniJSParsedSentence),
before = instance._beforeHelper(element, aniJSParsedSentence),
after = instance._afterHelper(element, aniJSParsedSentence),
helper = instance._helperHelper(element, aniJSParsedSentence);

how += ANIMATED;

//TODO: ejecutar function before
//antes de aqui

//Creo un nuevo animation context
var animationContextConfig = {
whatList: whatList,
nodeHelper: NodeHelper,
animationEndEvent: instance.animationEndEvent,
how: how,
after: after
},

animationContextInstance = new AnimationContext(animationContextConfig);

//Si before, le paso el animation context
if(before){
before(event, animationContextInstance);
} else {
animationContextInstance.run();
}
}

Expand All @@ -190,6 +183,8 @@ var AniJSLib = function(){


}
} else {
console.log('You ust define some event');
}
}

Expand Down Expand Up @@ -228,7 +223,7 @@ var AniJSLib = function(){
* @return
*/
instance.purge = function (selector) {

if(selector && selector !== ''){
var purgeNodeCollection = document.querySelectorAll(selector),
size = purgeNodeCollection.length,
Expand All @@ -238,7 +233,6 @@ var AniJSLib = function(){
instance._purgeNode(purgeNodeCollection[i]);
}
}

}

/**
Expand Down Expand Up @@ -286,6 +280,10 @@ var AniJSLib = function(){
var defaultValue = '',
when = aniJSParsedSentence.when || defaultValue;

if(when === 'animationend'){
when = instance._animationEndPrefix();
}

return when;
}

Expand Down Expand Up @@ -358,7 +356,46 @@ var AniJSLib = function(){
* @return defaultValue
*/
instance._afterHelper = function (element, aniJSParsedSentence) {
var defaultValue = aniJSParsedSentence.after || '';
var defaultValue = instance._callbackHelper(element, aniJSParsedSentence, aniJSParsedSentence.after)
return defaultValue;
}
/**
* Helper to setup the after callback function
* @method _afterHelper
* @param {} element
* @param {} aniJSParsedSentence
* @return defaultValue
*/
instance._beforeHelper = function (element, aniJSParsedSentence) {
var defaultValue = instance._callbackHelper(element, aniJSParsedSentence, aniJSParsedSentence.before)
return defaultValue;
}

/**
* Helper for before and after helpers refactoring
* @method _callbackHelper
* @param {} element
* @param {} aniJSParsedSentence
* @param {} callbackFunction
* @return defaultValue
*/
instance._callbackHelper = function(element, aniJSParsedSentence, callbackFunction){
var defaultValue = callbackFunction || '',
helper = instance._helperHelper(element, aniJSParsedSentence);

if (defaultValue) {
if(!instance.isFunction(defaultValue)) {
var helperCollection = instance.helperCollection,
helperInstance = helperCollection[helper];

if (helperInstance && helperInstance[defaultValue]){
defaultValue = helperInstance[defaultValue];
} else {
defaultValue = false;
}
}
}

return defaultValue;
}

Expand Down Expand Up @@ -425,6 +462,94 @@ var AniJSLib = function(){
};
}

/**
* Thanks a lot to underscore guys
* @method isFunction
* @param {} obj
* @return UnaryExpression
*/
instance.isFunction = function(obj) {
return !!(obj && obj.constructor && obj.call && obj.apply);
}



/**
* Encapsulate the animation Context
* @class animationContext
* @author @dariel_noel
*/
var AnimationContext = ( function(config){

var animationContextInstance = this;

/**
* Class constructor
* @method initializer
* @param {} config
* @return
*/
animationContextInstance.initializer = function(config){

//ATTRS
animationContextInstance.whatList = config.whatList || [];

animationContextInstance.nodeHelper = config.nodeHelper;

animationContextInstance.animationEndEvent = config.animationEndEvent;

animationContextInstance.how = config.how;

animationContextInstance.after = config.after;

},

/**
* Execute an animation context instance
* @method run
* @return
*/
animationContextInstance.run = function(){
var whatList = animationContextInstance.whatList,
whatListSize = whatList.length,
nodeHelper = animationContextInstance.nodeHelper,
how = animationContextInstance.how,
animationEndEvent = animationContextInstance.animationEndEvent,
after = animationContextInstance.after,
helperCollection = config.helperCollection,
j = 0;

for ( j; j < whatListSize; j++) {
whatListItem = whatList[j];

nodeHelper.addClass(whatListItem, how);

// create event
whatListItem.addEventListener(animationEndEvent, function(e) {

// remove event
e.target.removeEventListener(e.type, arguments.callee);

//TODO: Could be necesary remove the class after animation finish?
// maybe we can specify this by configuration option
nodeHelper.removeClass(e.target, how);

// callback handler
//El after deberia venir como mismo el before
if (after) {
after(e, animationContextInstance);
}

});

}
}

animationContextInstance.initializer(config);


} );

/**
* Encapsulate the AnimJS sintax parser
* @class Parser
Expand Down Expand Up @@ -600,7 +725,5 @@ var AniJSLib = function(){

};


var AniJS = new AniJSLib();

AniJS.run();
Loading

0 comments on commit 8c1e322

Please sign in to comment.