From de75a13d349231dc915a88795af9c1f230689159 Mon Sep 17 00:00:00 2001 From: Afshin Mehrabani Date: Sun, 7 Aug 2016 13:04:52 +0100 Subject: [PATCH] cleaning css classes after animation ends + adding active flag to events rather than element --- build/scrollanim.js | 54 +++++++++++++++++++++++++++++++++++------ build/scrollanim.min.js | 4 +-- scrollanim.js | 54 +++++++++++++++++++++++++++++++++++------ 3 files changed, 94 insertions(+), 18 deletions(-) diff --git a/build/scrollanim.js b/build/scrollanim.js index 886559d..53d0c14 100644 --- a/build/scrollanim.js +++ b/build/scrollanim.js @@ -370,7 +370,7 @@ var event = element.getAttribute(_options.attribute); _add(element, { - 'in': event + 'in': event }); } }; @@ -387,8 +387,16 @@ * See kissui.position for more options to bind events. */ function _add (element, event) { + var eventObj = {}; + for (var e in event) { kissuiPosition.add(element, e); + + eventObj[e] = { + animation: event[e], + // adding active flag + active: false + }; } // add visibility: hidden to the element @@ -396,8 +404,7 @@ _elements.push({ element: element, - event: event, - active: false + event: eventObj }); }; @@ -423,15 +430,47 @@ */ function _attach (element, event) { for (var e in element.event) { - if (e == event && element.active === false) { + if (e == event && element.event[e].active === false) { + element.element.style.opacity = '1'; - element.element.className += ' animated ' + element.event[e]; + element.element.className += ' animated ' + element.event[e].animation; + - //set this flag to prevent processing same element twice - element.active = true; + (function (element, e) { + _addEventListener(element.element, [ + 'webkitAnimationEnd', + 'mozAnimationEnd', + 'MSAnimationEnd', + 'oanimationend', + 'animationend'], function () { + element.element.className = element.element.className.replace('animated ' + element.event[e].animation, ''); + + //set this flag to prevent processing same element twice + element.event[e].active = true; + }); + }(element, e)); + + } + } + }; + /** + * To bind an event to browser + * + */ + function _addEventListener (element, event, fn) { + // is event an array? + if (typeof (event) == 'object') { + for (var i = 0; i < event.length;i++) { + _addEventListener(element, event[i], fn); } } + + if (element.addEventListener) { // modern browsers including IE9+ + element.addEventListener(event, fn, false); + } else if (element.attachEvent) { // IE8 and below + element.attachEvent('on' + event, fn); + } }; /** @@ -445,7 +484,6 @@ }); kissuiPosition.init(); - }; _init() diff --git a/build/scrollanim.min.js b/build/scrollanim.min.js index 8cece81..d683641 100644 --- a/build/scrollanim.min.js +++ b/build/scrollanim.min.js @@ -1,2 +1,2 @@ -/*! kissui.scrollanim 2016-08-01 */ -!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.kissuiPosition=b()}):a.kissuiPosition=b(a)}(this,function(){function a(a){if(a="Kissui.position: "+a,1!=n.safeMode)throw Error(a);console.log(a)}function b(){for(var a=document.querySelectorAll("*["+n.attribute+"]"),b=0;b-1&&(d=e>=0&&g>=0&&f<=l&&h<=m&&(d&&!0)),c.indexOf("out")>-1&&(d=(e+j<0||g+k<0||g>m||e>l)&&(d&&!0)),c.indexOf("top")>-1&&(d=0==e&&(d&&!0)),c.indexOf("left")>-1&&(d=0==g&&(d&&!0)),c.indexOf("right")>-1&&(d=h==m&&(d&&!0)),c.indexOf("bottom")>-1&&(d=f==l&&(d&&!0)),c.indexOf("middle")>-1&&(d=e+j/2==l/2&&(d&&!0)),c.indexOf("center")>-1&&(d=g+k/2==m/2&&(d&&!0)),d&&(a.getAttribute("id")&&i(a.getAttribute("id"),a),i(b,a),i("*",a,b))}function g(a){for(var b=0;b-1&&m[a].splice(c,1))},{_options:n,_elements:l,on:h,once:j,removeListener:_removeListener,init:k,positions:g,add:c,reset:d}}),function(a,b){"function"==typeof define&&define.amd?define(["kissuiPosition"],function(c){return a.kissuiScrollAnim=b(c)}):a.kissuiScrollAnim=b(a.kissuiPosition)}(this,function(a){function b(){h=[];for(var a=document.querySelectorAll("*["+g.attribute+"]"),b=0;b-1&&(d=e>=0&&g>=0&&f<=l&&h<=m&&(d&&!0)),c.indexOf("out")>-1&&(d=(e+j<0||g+k<0||g>m||e>l)&&(d&&!0)),c.indexOf("top")>-1&&(d=0==e&&(d&&!0)),c.indexOf("left")>-1&&(d=0==g&&(d&&!0)),c.indexOf("right")>-1&&(d=h==m&&(d&&!0)),c.indexOf("bottom")>-1&&(d=f==l&&(d&&!0)),c.indexOf("middle")>-1&&(d=e+j/2==l/2&&(d&&!0)),c.indexOf("center")>-1&&(d=g+k/2==m/2&&(d&&!0)),d&&(a.getAttribute("id")&&i(a.getAttribute("id"),a),i(b,a),i("*",a,b))}function g(a){for(var b=0;b-1&&m[a].splice(c,1))},{_options:n,_elements:l,on:h,once:j,removeListener:_removeListener,init:k,positions:g,add:c,reset:d}}),function(a,b){"function"==typeof define&&define.amd?define(["kissuiPosition"],function(c){return a.kissuiScrollAnim=b(c)}):a.kissuiScrollAnim=b(a.kissuiPosition)}(this,function(a){function b(){i=[];for(var a=document.querySelectorAll("*["+h.attribute+"]"),b=0;b