Skip to content

Instantly share code, notes, and snippets.

@z-------------
Last active August 29, 2015 14:21
Show Gist options
  • Save z-------------/49f36d995092c274191e to your computer and use it in GitHub Desktop.
Save z-------------/49f36d995092c274191e to your computer and use it in GitHub Desktop.
Calculate which element is the current one.
/*
TODO:
+ factor in proximity to page center
+ factor in area instead of just height
*/
function currentElem(selector){
var sections = document.querySelectorAll(selector);
var contenders = [];
for (var s = 0; s < sections.length; s++) {
var elem = sections[s];
var item = {
elem: elem,
onScreen: (function(elem){
// elem array
var eArr = [];
for (var e = elem.offsetTop; e <= elem.offsetTop + elem.offsetHeight; e++) {
eArr.push(e);
}
// screen array
var sArr = [];
for (var s = window.scrollY; s <= window.scrollY + window.innerHeight; s++) {
sArr.push(s);
}
// calculate overlap
var overlap = [];
eArr.forEach(function(v){
if (sArr.indexOf(v) !== -1) {
overlap.push(v)
}
});
return (overlap[overlap.length - 1] - overlap[0])
})(elem)
};
contenders.push(item);
}
contenders = contenders.filter(function(item){
return isFinite(item.onScreen);
});
contenders.sort(function(a, b){
if (a.onScreen > b.onScreen) {
return -1;
} else if (b.onScreen > a.onScreen) {
return 1;
}
});
if (contenders[0]) {
return contenders[0].elem.getAttribute("id");
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment