diff --git a/app/assets/javascripts/stick-at-top-when-scrolling.js b/app/assets/javascripts/stick-at-top-when-scrolling.js index 9cb9421f8..42636c47d 100644 --- a/app/assets/javascripts/stick-at-top-when-scrolling.js +++ b/app/assets/javascripts/stick-at-top-when-scrolling.js @@ -31,6 +31,12 @@ if ($els.length > 0) { sticky.$els = $els + $els.each(function (i, el) { + var $el = $(el) + + $el.data('scrolled-from', sticky.getElementOffset($el).top) + }) + if (sticky._scrollTimeout === false) { $(global).scroll(sticky.onScroll) sticky._scrollTimeout = global.setInterval(sticky.checkScroll, 50) @@ -62,21 +68,24 @@ onResize: function () { sticky._hasResized = true }, + scrolledFromInsideWindow: function (scrolledFrom) { + var windowVerticalPosition = sticky.getWindowPositions().scrollTop + + return windowVerticalPosition < scrolledFrom + }, checkScroll: function () { if (sticky._hasScrolled === true) { sticky._hasScrolled = false - var windowVerticalPosition = sticky.getWindowPositions().scrollTop - var windowDimensions = sticky.getWindowDimensions() sticky.$els.each(function (i, el) { var $el = $(el) var scrolledFrom = $el.data('scrolled-from') - if (scrolledFrom && windowVerticalPosition < scrolledFrom) { + if (scrolledFrom && sticky.scrolledFromInsideWindow(scrolledFrom)) { sticky.release($el) - } else if (windowDimensions.width > 768 && windowVerticalPosition >= sticky.getElementOffset($el).top) { + } else if (windowDimensions.width > 768 && !sticky.scrolledFromInsideWindow(scrolledFrom)) { sticky.stick($el) } }) @@ -106,18 +115,20 @@ }) } }, + addShimForEl: function ($el, width, height) { + $el.before('