50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
|
(function($K)
|
||
|
{
|
||
|
$K.add('module', 'visibility', {
|
||
|
init: function(app, context)
|
||
|
{
|
||
|
this.app = app;
|
||
|
this.$win = app.$win;
|
||
|
|
||
|
// defaults
|
||
|
var defaults = {
|
||
|
tolerance: 15 // px
|
||
|
};
|
||
|
|
||
|
// context
|
||
|
this.context = context;
|
||
|
this.params = context.getParams(defaults);
|
||
|
this.$element = context.getElement();
|
||
|
},
|
||
|
|
||
|
// public
|
||
|
start: function()
|
||
|
{
|
||
|
this.$win.on('scroll.kube.visibility resize.kube.visibility', this._check.bind(this));
|
||
|
this._check();
|
||
|
},
|
||
|
stop: function()
|
||
|
{
|
||
|
this.$win.off('.kube.visibility');
|
||
|
},
|
||
|
|
||
|
// private
|
||
|
_check: function()
|
||
|
{
|
||
|
var docViewTop = this.$win.scrollTop();
|
||
|
var docViewBottom = docViewTop + this.$win.height();
|
||
|
var elemTop = this.$element.offset().top;
|
||
|
var elemBottom = elemTop + this.$element.height();
|
||
|
|
||
|
var check = ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <= (docViewBottom + this.params.tolerance)) && (elemTop >= docViewTop));
|
||
|
if (check)
|
||
|
{
|
||
|
this.app.broadcast('visibility.visible', this, this.$element);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.app.broadcast('visibility.invisible', this, this.$element);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
})(Kube);
|