From 738a0c28ad061de09325d076c2d4d89af5e6378a Mon Sep 17 00:00:00 2001 From: lvil Date: Sun, 6 Oct 2013 14:38:35 +0200 Subject: [PATCH] Added sticky_btm for bottom-stuck elements --- shortcuts/sticky-elements/waypoints-sticky.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/shortcuts/sticky-elements/waypoints-sticky.js b/shortcuts/sticky-elements/waypoints-sticky.js index cba61b6b..f8a532f0 100644 --- a/shortcuts/sticky-elements/waypoints-sticky.js +++ b/shortcuts/sticky-elements/waypoints-sticky.js @@ -53,3 +53,56 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt }); }).call(this); + +(function() { + + (function(root, factory) { + if (typeof define === 'function' && define.amd) { + return define(['jquery', 'waypoints'], factory); + } else { + return factory(root.jQuery); + } + })(this, function($) { + var defaults, wrap; + defaults = { + wrapper: '
', + stuckClass: 'stuck' + }; + wrap = function($elements, options) { + $elements.wrap(options.wrapper); + $elements.each(function() { + var $this; + $this = $(this); + + if ($(window).scrollTop() + $(window).height(); < $this.offset().top + $this.height()) + { + $this.addClass(options.stuckClass); + } + + $this.parent().height($this.outerHeight()); + + return true; + }); + return $elements.parent(); + }; + return $.waypoints('extendFn', 'sticky_btm', function(options) { + var $wrap, originalHandler; + options = $.extend({}, $.fn.waypoint.defaults, defaults, options); + $wrap = wrap(this, options); + originalHandler = options.handler; + options.offset = function (){return $(window).height()-$(this).height();}; + options.handler = function(direction) { + var $sticky, shouldBeStuck; + $sticky = $(this).children(':first'); + shouldBeStuck = direction === 'up' || direction === 'right'; + $sticky.toggleClass(options.stuckClass, shouldBeStuck); + if (originalHandler != null) { + return originalHandler.call(this, direction); + } + }; + $wrap.waypoint(options); + return this; + }); + }); + +}).call(this);