litejs
Version:
Single-page application framework
37 lines (30 loc) • 721 B
JavaScript
El.bindings.topFloat = function(el, offset) {
var h = el.offsetHeight + offset
, lastAbs = 0
, lastTop = 0
, toFix = 0
El.on(window, "scroll", function(e) {
var pos
, top = El.scrollTop()
// scroll up
if (top < lastTop) {
if (top <= toFix) {
el.style.position = "fixed"
el.style.top = toFix = 0
} else {
pos = lastTop - h
if (toFix < 0 || lastAbs < pos) {
el.style.position = "absolute"
el.style.top = (lastAbs = toFix = pos < 0 ? 0 : pos < lastAbs ? lastAbs : pos) + "px"
}
}
} else if (toFix === 0) {
el.style.position = "absolute"
el.style.top = lastTop + "px"
lastAbs = lastTop
toFix = -1
}
lastTop = top
})
}
El.bindings.topFloat.once = 1