Javascript cleanup
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
---
|
||||
description: ScrollSpy
|
||||
|
||||
authors:
|
||||
- David Walsh (http://davidwalsh.name)
|
||||
|
||||
license:
|
||||
- MIT-style license
|
||||
|
||||
requires:
|
||||
core/1.2.1: '*'
|
||||
|
||||
provides:
|
||||
- ScrollSpy
|
||||
...
|
||||
*/
|
||||
var ScrollSpy = new Class({
|
||||
|
||||
/* implements */
|
||||
Implements: [Options,Events],
|
||||
|
||||
/* options */
|
||||
options: {
|
||||
container: window,
|
||||
max: 0,
|
||||
min: 0,
|
||||
mode: 'vertical'/*,
|
||||
onEnter: $empty,
|
||||
onLeave: $empty,
|
||||
onScroll: $empty,
|
||||
onTick: $empty
|
||||
*/
|
||||
},
|
||||
|
||||
/* initialization */
|
||||
initialize: function(options) {
|
||||
/* set options */
|
||||
this.setOptions(options);
|
||||
this.container = document.id(this.options.container);
|
||||
this.enters = this.leaves = 0;
|
||||
this.inside = false;
|
||||
|
||||
/* listener */
|
||||
var self = this;
|
||||
this.listener = function(e) {
|
||||
/* if it has reached the level */
|
||||
var position = self.container.getScroll(),
|
||||
xy = position[self.options.mode == 'vertical' ? 'y' : 'x'],
|
||||
min = typeOf(self.options.min) == 'function' ? self.options.min() : self.options.min,
|
||||
max = typeOf(self.options.max) == 'function' ? self.options.max() : self.options.max;
|
||||
|
||||
if(xy >= min && (max == 0 || xy <= max)) {
|
||||
/* trigger enter event if necessary */
|
||||
if(!self.inside) {
|
||||
/* record as inside */
|
||||
self.inside = true;
|
||||
self.enters++;
|
||||
/* fire enter event */
|
||||
self.fireEvent('enter',[position,self.enters,e]);
|
||||
}
|
||||
/* trigger the "tick", always */
|
||||
self.fireEvent('tick',[position,self.inside,self.enters,self.leaves,e]);
|
||||
}
|
||||
/* trigger leave */
|
||||
else if(self.inside){
|
||||
self.inside = false;
|
||||
self.leaves++;
|
||||
self.fireEvent('leave',[position,self.leaves,e]);
|
||||
}
|
||||
/* fire scroll event */
|
||||
self.fireEvent('scroll',[position,self.inside,self.enters,self.leaves,e]);
|
||||
};
|
||||
|
||||
/* make it happen */
|
||||
this.addListener();
|
||||
},
|
||||
|
||||
/* starts the listener */
|
||||
start: function() {
|
||||
this.container.addEvent('scroll',this.listener);
|
||||
},
|
||||
|
||||
/* stops the listener */
|
||||
stop: function() {
|
||||
this.container.removeEvent('scroll',this.listener);
|
||||
},
|
||||
|
||||
/* legacy */
|
||||
addListener: function() {
|
||||
this.start();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user