From b97594e9c63723f1d0bfba524c90e36bc67d40f0 Mon Sep 17 00:00:00 2001 From: Afshin Mehrabani Date: Wed, 31 Aug 2016 14:31:33 +0400 Subject: [PATCH] addinng autoreset, options and data-kui-event attribute. v0.3.0 :rocket: --- build/scrollanim.js | 77 ++++++++++++++++++++++++++++++++++++----- build/scrollanim.min.js | 4 +-- package.json | 2 +- scrollanim.js | 77 ++++++++++++++++++++++++++++++++++++----- 4 files changed, 141 insertions(+), 19 deletions(-) diff --git a/build/scrollanim.js b/build/scrollanim.js index febea2d..4a09d6f 100644 --- a/build/scrollanim.js +++ b/build/scrollanim.js @@ -373,9 +373,18 @@ * options */ var _options = { - //trigger the events on module init? + // trigger the events on module init? triggerOnInit: true, - attribute: 'data-kui-anim' + // prefix for all `data-...` attributes + attributePrefix: 'data-kui-', + animAttribute: 'anim', + // when to trigger the animation? + eventAttribute: 'event', + // default event to trigger + defaultEvent: 'in', + // reset the animation event after element is out of the viewport? + // enabling this option triggers the event each time it appears in the viewport + autoReset: true }; /** @@ -383,6 +392,14 @@ */ var _elements = []; + /** + * Get the attribute name + * + */ + function __(name) { + return _options.attributePrefix + name; + }; + /** * Find elements */ @@ -390,15 +407,17 @@ //clear old elements first _elements = []; - var elements = document.querySelectorAll('*[' + _options.attribute + ']'); + var elements = document.querySelectorAll('*[' + __(_options.animAttribute) + ']'); for (var i = 0;i < elements.length;i++) { + var param = {}; var element = elements[i]; - var event = element.getAttribute(_options.attribute); + var anim = element.getAttribute(__(_options.animAttribute)); + var event = element.getAttribute(__(_options.eventAttribute)) || 'in'; - _add(element, { - 'in': event - }); + param[event] = anim; + + _add(element, param); } }; @@ -426,6 +445,8 @@ }; } + kissuiPosition.add(element, 'out'); + // add visibility: hidden to the element element.style.opacity = '0'; @@ -500,6 +521,37 @@ } }; + /** + * Clear animation, reset `opacity` and `active` flag on an element + * + */ + function _resetElement (element) { + var elx = _find(element) + + for (var e in elx.event) { + elx.event[e].active = false; + } + + element.style.opacity = 0; + }; + + /** + * Set option + * + */ + function _setOption (name, value) { + _options[name] = value; + }; + + /** + * Set an object of options + */ + function _setOptions (options) { + for (var o in options) { + _setOption(o, options[o]); + } + }; + /** * Start the module */ @@ -510,6 +562,13 @@ _attach(_find(element), event); }); + // to manage `autoReset` + kissuiPosition.on('out', function (element) { + if (_options.autoReset) { + _resetElement(element); + } + }); + kissuiPosition.init(); }; @@ -519,6 +578,8 @@ _options: _options, _elements: _elements, init: _init, - add: _add + add: _add, + setOption: _setOption, + setOptions: _setOptions }; })); diff --git a/build/scrollanim.min.js b/build/scrollanim.min.js index 99593a6..6aac052 100644 --- a/build/scrollanim.min.js +++ b/build/scrollanim.min.js @@ -1,2 +1,2 @@ -/*! kissui.scrollanim 2016-08-21 */ -!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!=q.safeMode)throw Error(a);console.log(a)}function b(){for(var a=document.querySelectorAll("*["+q.attribute+"]"),b=0;b0){if(ba&&a>b+c)return!0;return!1}function g(a,b){var c=b.split(" "),d=!0,e=a.getBoundingClientRect().top,g=a.getBoundingClientRect().bottom,h=a.getBoundingClientRect().left,i=a.getBoundingClientRect().right,k=a.getBoundingClientRect().height,l=a.getBoundingClientRect().width,m=window.innerHeight||document.documentElement.clientHeight,n=document.body.clientWidth||document.documentElement.clientWidth,q=document.body.scrollTop-o,r=document.body.scrollLeft-p;c.indexOf("in")>-1&&(d=e>=0&&h>=0&&g<=m&&i<=n&&(d&&!0)),c.indexOf("out")>-1&&(d=(e+k<0||h+l<0||h>n||e>m)&&(d&&!0)),c.indexOf("top")>-1&&(d=!(0!=e&&!f(0,e,q))&&(d&&!0)),c.indexOf("left")>-1&&(d=!(0!=h&&!f(0,h,r))&&(d&&!0)),c.indexOf("right")>-1&&(d=!(i!=n&&!f(n,i,r))&&(d&&!0)),c.indexOf("bottom")>-1&&(d=!(g!=m&&!f(m,g,q))&&(d&&!0)),c.indexOf("middle")>-1&&(d=!(e+k/2!=m/2&&!f(m/2,e+k/2,q))&&(d&&!0)),c.indexOf("center")>-1&&(d=!(h+l/2!=n/2&&!f(n/2,h+l/2,r))&&(d&&!0)),d&&(a.getAttribute("id")&&j(a.getAttribute("id"),a),j(b,a),j("*",a,b))}function h(a){for(var b=0;b-1&&n[a].splice(c,1))},{_options:q,_elements:m,on:i,once:k,removeListener:_removeListener,init:l,positions:h,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;b0){if(ba&&a>b+c)return!0;return!1}function g(a,b){var c=b.split(" "),d=!0,e=a.getBoundingClientRect().top,g=a.getBoundingClientRect().bottom,h=a.getBoundingClientRect().left,i=a.getBoundingClientRect().right,k=a.getBoundingClientRect().height,l=a.getBoundingClientRect().width,m=window.innerHeight||document.documentElement.clientHeight,n=document.body.clientWidth||document.documentElement.clientWidth,q=document.body.scrollTop-o,r=document.body.scrollLeft-p;c.indexOf("in")>-1&&(d=e>=0&&h>=0&&g<=m&&i<=n&&(d&&!0)),c.indexOf("out")>-1&&(d=(e+k<0||h+l<0||h>n||e>m)&&(d&&!0)),c.indexOf("top")>-1&&(d=!(0!=e&&!f(0,e,q))&&(d&&!0)),c.indexOf("left")>-1&&(d=!(0!=h&&!f(0,h,r))&&(d&&!0)),c.indexOf("right")>-1&&(d=!(i!=n&&!f(n,i,r))&&(d&&!0)),c.indexOf("bottom")>-1&&(d=!(g!=m&&!f(m,g,q))&&(d&&!0)),c.indexOf("middle")>-1&&(d=!(e+k/2!=m/2&&!f(m/2,e+k/2,q))&&(d&&!0)),c.indexOf("center")>-1&&(d=!(h+l/2!=n/2&&!f(n/2,h+l/2,r))&&(d&&!0)),d&&(a.getAttribute("id")&&j(a.getAttribute("id"),a),j(b,a),j("*",a,b))}function h(a){for(var b=0;b-1&&n[a].splice(c,1))},{_options:q,_elements:m,on:i,once:k,removeListener:_removeListener,init:l,positions:h,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(a){return l.attributePrefix+a}function c(){m=[];for(var a=document.querySelectorAll("*["+b(l.animAttribute)+"]"),c=0;c