Skip to content

Commit de75a13

Browse files
committed
cleaning css classes after animation ends + adding active flag to events rather than element
1 parent 6d48fd8 commit de75a13

File tree

3 files changed

+94
-18
lines changed

3 files changed

+94
-18
lines changed

build/scrollanim.js

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@
370370
var event = element.getAttribute(_options.attribute);
371371

372372
_add(element, {
373-
'in': event
373+
'in': event
374374
});
375375
}
376376
};
@@ -387,17 +387,24 @@
387387
* See kissui.position for more options to bind events.
388388
*/
389389
function _add (element, event) {
390+
var eventObj = {};
391+
390392
for (var e in event) {
391393
kissuiPosition.add(element, e);
394+
395+
eventObj[e] = {
396+
animation: event[e],
397+
// adding active flag
398+
active: false
399+
};
392400
}
393401

394402
// add visibility: hidden to the element
395403
element.style.opacity = '0';
396404

397405
_elements.push({
398406
element: element,
399-
event: event,
400-
active: false
407+
event: eventObj
401408
});
402409
};
403410

@@ -423,15 +430,47 @@
423430
*/
424431
function _attach (element, event) {
425432
for (var e in element.event) {
426-
if (e == event && element.active === false) {
433+
if (e == event && element.event[e].active === false) {
434+
427435
element.element.style.opacity = '1';
428-
element.element.className += ' animated ' + element.event[e];
436+
element.element.className += ' animated ' + element.event[e].animation;
437+
429438

430-
//set this flag to prevent processing same element twice
431-
element.active = true;
439+
(function (element, e) {
440+
_addEventListener(element.element, [
441+
'webkitAnimationEnd',
442+
'mozAnimationEnd',
443+
'MSAnimationEnd',
444+
'oanimationend',
445+
'animationend'], function () {
446+
element.element.className = element.element.className.replace('animated ' + element.event[e].animation, '');
447+
448+
//set this flag to prevent processing same element twice
449+
element.event[e].active = true;
450+
});
451+
}(element, e));
452+
453+
}
454+
}
455+
};
432456

457+
/**
458+
* To bind an event to browser
459+
*
460+
*/
461+
function _addEventListener (element, event, fn) {
462+
// is event an array?
463+
if (typeof (event) == 'object') {
464+
for (var i = 0; i < event.length;i++) {
465+
_addEventListener(element, event[i], fn);
433466
}
434467
}
468+
469+
if (element.addEventListener) { // modern browsers including IE9+
470+
element.addEventListener(event, fn, false);
471+
} else if (element.attachEvent) { // IE8 and below
472+
element.attachEvent('on' + event, fn);
473+
}
435474
};
436475

437476
/**
@@ -445,7 +484,6 @@
445484
});
446485

447486
kissuiPosition.init();
448-
449487
};
450488

451489
_init()

build/scrollanim.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scrollanim.js

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
var event = element.getAttribute(_options.attribute);
4444

4545
_add(element, {
46-
'in': event
46+
'in': event
4747
});
4848
}
4949
};
@@ -60,17 +60,24 @@
6060
* See kissui.position for more options to bind events.
6161
*/
6262
function _add (element, event) {
63+
var eventObj = {};
64+
6365
for (var e in event) {
6466
kissuiPosition.add(element, e);
67+
68+
eventObj[e] = {
69+
animation: event[e],
70+
// adding active flag
71+
active: false
72+
};
6573
}
6674

6775
// add visibility: hidden to the element
6876
element.style.opacity = '0';
6977

7078
_elements.push({
7179
element: element,
72-
event: event,
73-
active: false
80+
event: eventObj
7481
});
7582
};
7683

@@ -96,17 +103,49 @@
96103
*/
97104
function _attach (element, event) {
98105
for (var e in element.event) {
99-
if (e == event && element.active === false) {
106+
if (e == event && element.event[e].active === false) {
107+
100108
element.element.style.opacity = '1';
101-
element.element.className += ' animated ' + element.event[e];
109+
element.element.className += ' animated ' + element.event[e].animation;
110+
102111

103-
//set this flag to prevent processing same element twice
104-
element.active = true;
112+
(function (element, e) {
113+
_addEventListener(element.element, [
114+
'webkitAnimationEnd',
115+
'mozAnimationEnd',
116+
'MSAnimationEnd',
117+
'oanimationend',
118+
'animationend'], function () {
119+
element.element.className = element.element.className.replace('animated ' + element.event[e].animation, '');
120+
121+
//set this flag to prevent processing same element twice
122+
element.event[e].active = true;
123+
});
124+
}(element, e));
105125

106126
}
107127
}
108128
};
109129

130+
/**
131+
* To bind an event to browser
132+
*
133+
*/
134+
function _addEventListener (element, event, fn) {
135+
// is event an array?
136+
if (typeof (event) == 'object') {
137+
for (var i = 0; i < event.length;i++) {
138+
_addEventListener(element, event[i], fn);
139+
}
140+
}
141+
142+
if (element.addEventListener) { // modern browsers including IE9+
143+
element.addEventListener(event, fn, false);
144+
} else if (element.attachEvent) { // IE8 and below
145+
element.attachEvent('on' + event, fn);
146+
}
147+
};
148+
110149
/**
111150
* Start the module
112151
*/
@@ -118,7 +157,6 @@
118157
});
119158

120159
kissuiPosition.init();
121-
122160
};
123161

124162
_init()

0 commit comments

Comments
 (0)