From 7b3ac5510398da7924896d8316ef0064928cb618 Mon Sep 17 00:00:00 2001 From: Tom Byers Date: Mon, 7 Jan 2019 16:51:28 +0000 Subject: [PATCH] Add method for adding a sticky element --- .../stick-to-window-when-scrolling.js | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/stick-to-window-when-scrolling.js b/app/assets/javascripts/stick-to-window-when-scrolling.js index c7296d12d..9ef98e56b 100644 --- a/app/assets/javascripts/stick-to-window-when-scrolling.js +++ b/app/assets/javascripts/stick-to-window-when-scrolling.js @@ -188,24 +188,38 @@ Sticky.prototype.allElementsLoaded = function (totalEls) { return this._els.length === totalEls; }; + Sticky.prototype.add = function (el, setPositions, cb) { + var self = this; + var $el = $(el); + var elObj = new StickyElement($el, self); + + self.setElementDimensions(elObj, function () { + self._els.push(elObj); + if (setPositions) { + self.setElementPositions(); + } + if (cb !== undefined) { + cb(); + } + }); + }; Sticky.prototype.init = function () { var self = this; var $els = $(self.CSS_SELECTOR); var numOfEls = $els.length; + var onAllLoaded = function () { + if (self._els.length === numOfEls) { + self._elsLoaded = true; + + // set positions based on initial scroll position + self.setElementPositions(); + } + }; if (numOfEls > 0) { $els.each(function (i, el) { - var $el = $(el); - var elObj = new StickyElement($el, self); - - self.setElementDimensions(elObj, function () { - self._els.push(elObj); - // set positions based on initial scroll positionu - if (self._els.length === numOfEls) { - self._elsLoaded = true; - self.setElementPositions(); - } - }); + // delay setting position until all stickys are loaded + self.add(el, false, onAllLoaded); }); // flag when scrolling takes place and check (and re-position) sticky elements relative to