Here is the example.
I create an object that have 3 elements referenced by the first parameter (document.querySelectorAll...) the I loop through those elements and launch a specific scrolling function (simplified in the example. Inside this function I use this approach to detect the scroll and save perf. I pass the element every time I call this function (first commented console.log) and works well, then inside the timer also I still having the 3 elements (in this example) but then inside the if statement I only have the first one.
I think I understand the problem, but I'm not finding a solution.
function extend( a, b ) {
for( var key in b ) {
if( b.hasOwnProperty( key ) ) {
a[key] = b[key];
}
}
return a;
}
function addEvent(element, evnt, funct){
if (element.attachEvent)
return element.attachEvent('on'+evnt, funct);
else
return element.addEventListener(evnt, funct, false);
}
function MyObject(el, opt){
this.el = el;
this.opt = extend( {}, this.opt );
extend( this.opt, opt );
this._init();
}
MyObject.prototype._init = function(){
var self = this;
//this.didScroll = false; //Remove this and put it per element
this.totalObjs = document.querySelectorAll(this.el);
this.objs = [].slice.call( this.totalObjs );
this.objs.forEach( function( el, i ) {
self._onScroll(el);
});
};
MyObject.prototype._onScroll = function(e){
var self = this;
e.didScroll = false; // Add per element
addEvent(window, 'scroll', function(){
e.didScroll = true;
});
// Here I have my 3 elements
// console.log(e.id);
setInterval(function() {
// Here I have my 3 elements
// console.log(e.id);
if( e.didScroll ){
e.didScroll = false;
// Here I have only the first element
console.log(e.id);
}
}, 500);
};
var obj1 = new MyObject('.obj', {});