relatively-sticky

A jQuery plugin for creating smart sticky elements
git clone https://git.ce9e.org/relatively-sticky.git

commit
3ef391e196964365e93133af7bcc5c488922fc70
parent
809cae990e8d462db4c0a0ddb0a8c12b2d57160a
Author
leaf corcoran <leafot@gmail.com>
Date
2013-07-31 16:12
sticky_kit:recalc calls tick

Diffstat

M jquery.sticky-kit.coffee 11 ++++++++---
M jquery.sticky-kit.js 12 ++++++++----
M jquery.sticky-kit.min.js 8 ++++----

3 files changed, 20 insertions, 11 deletions


diff --git a/jquery.sticky-kit.coffee b/jquery.sticky-kit.coffee

@@ -22,7 +22,7 @@ $.fn.stick_in_parent = (parent_selector, opts={}) ->
   22    22       recalc = ->
   23    23         border_top = parseInt parent.css("border-top-width"), 10
   24    24         padding_top = parseInt parent.css("padding-top"), 10
   25    -1         padding_bottom = parseInt parent.css("padding-bottom")
   -1    25         padding_bottom = parseInt parent.css("padding-bottom"), 10
   26    26 
   27    27         parent_top = parent.offset().top + border_top + padding_top
   28    28         parent_height = parent.height()
@@ -31,7 +31,6 @@ $.fn.stick_in_parent = (parent_selector, opts={}) ->
   31    31 
   32    32       recalc()
   33    33       return if height == parent_height
   34    -1       parent.on "sticky_kit:recalc", recalc
   35    34 
   36    35       # create a spacer
   37    36       float = elm.css "float"
@@ -49,7 +48,7 @@ $.fn.stick_in_parent = (parent_selector, opts={}) ->
   49    48       offset = 0
   50    49       reset_width = false
   51    50 
   52    -1       win.on "scroll", (e) ->
   -1    51       tick = ->
   53    52         scroll = win.scrollTop()
   54    53         if last_pos?
   55    54           delta = scroll - last_pos
@@ -135,6 +134,12 @@ $.fn.stick_in_parent = (parent_selector, opts={}) ->
  135   134               bottom: padding_bottom
  136   135               top: ""
  137   136             }).trigger("sticky_kit:bottom")
   -1   137 
   -1   138       win.on "scroll", tick
   -1   139       $(document.body).on "sticky_kit:recalc", ->
   -1   140         recalc()
   -1   141         tick()
   -1   142 
  138   143     ) $ elm
  139   144   @
  140   145 

diff --git a/jquery.sticky-kit.js b/jquery.sticky-kit.js

@@ -29,7 +29,7 @@
   29    29       sticky_class = "is_stuck";
   30    30     }
   31    31     _fn = function(elm, padding_bottom, parent_top, parent_height, height) {
   32    -1       var bottomed, fixed, float, last_pos, offset, parent, recalc, reset_width, spacer;
   -1    32       var bottomed, fixed, float, last_pos, offset, parent, recalc, reset_width, spacer, tick;
   33    33       parent = elm.parent();
   34    34       if (parent_selector != null) {
   35    35         parent = parent.closest(parent_selector);
@@ -38,7 +38,7 @@
   38    38         var border_top, padding_top;
   39    39         border_top = parseInt(parent.css("border-top-width"), 10);
   40    40         padding_top = parseInt(parent.css("padding-top"), 10);
   41    -1         padding_bottom = parseInt(parent.css("padding-bottom"));
   -1    41         padding_bottom = parseInt(parent.css("padding-bottom"), 10);
   42    42         parent_top = parent.offset().top + border_top + padding_top;
   43    43         parent_height = parent.height();
   44    44         return height = elm.outerHeight(true);
@@ -47,7 +47,6 @@
   47    47       if (height === parent_height) {
   48    48         return;
   49    49       }
   50    -1       parent.on("sticky_kit:recalc", recalc);
   51    50       float = elm.css("float");
   52    51       spacer = $("<div />").css({
   53    52         width: elm.outerWidth(true),
@@ -60,7 +59,7 @@
   60    59       last_pos = void 0;
   61    60       offset = 0;
   62    61       reset_width = false;
   63    -1       return win.on("scroll", function(e) {
   -1    62       tick = function() {
   64    63         var before, css, delta, scroll, will_bottom, win_height;
   65    64         scroll = win.scrollTop();
   66    65         if (last_pos != null) {
@@ -142,6 +141,11 @@
  142   141             }).trigger("sticky_kit:bottom");
  143   142           }
  144   143         }
   -1   144       };
   -1   145       win.on("scroll", tick);
   -1   146       return $(document.body).on("sticky_kit:recalc", function() {
   -1   147         recalc();
   -1   148         return tick();
  145   149       });
  146   150     };
  147   151     for (_i = 0, _len = this.length; _i < _len; _i++) {

diff --git a/jquery.sticky-kit.min.js b/jquery.sticky-kit.min.js

@@ -1,7 +1,7 @@
    1     1 /*
    2     2  WTFPL | Leaf Corcoran 2013 | http://leafo.net
    3     3 */
    4    -1 (function(){var f,t;f=this.jQuery;t=f(window);f.fn.stick_in_parent=function(d,h){var y,u,p,z,g,A;null==h&&(h={});f.isPlainObject(d)&&(h=d,d=void 0);p=h.sticky_class;u=h.inner_scrolling;null==u&&(u=!0);null==p&&(p="is_stuck");z=function(a,h,q,g,k){var n,r,l,v,b,e,w,x,s;e=a.parent();null!=d&&(e=e.closest(d));w=function(){var b,c;b=parseInt(e.css("border-top-width"),10);c=parseInt(e.css("padding-top"),10);h=parseInt(e.css("padding-bottom"));q=e.offset().top+b+c;g=e.height();return k=a.outerHeight(!0)};
    5    -1 w();if(k!==g)return e.on("sticky_kit:recalc",w),l=a.css("float"),s=f("<div />").css({width:a.outerWidth(!0),height:k,display:a.css("display"),"float":l}),n=r=!1,v=void 0,b=0,x=!1,t.on("scroll",function(m){var c,f,d;m=t.scrollTop();null!=v&&(f=m-v);v=m;r?(d=m+k+b>g+q,n&&!d&&(n=!1,a.css({position:"fixed",bottom:"",top:0}).trigger("sticky_kit:unbottom")),m<q&&(r=!1,b=0,"left"!==l&&"right"!==l||a.insertAfter(s),s.detach(),c={position:""},x&&(c.width=""),a.css(c).removeClass(p).trigger("sticky_kit:unstick")),
    6    -1 u&&(c=t.height(),k>c&&!n&&(b-=f,b=Math.max(c-k,b),b=Math.min(0,b),a.css({top:b+"px"})))):m>q&&(r=!0,c={position:"fixed",top:b},"none"===l&&"block"===a.css("display")&&(c.width=a.width()+"px",x=!0),a.css(c).addClass(p).after(s),"left"!==l&&"right"!==l||s.append(a),a.trigger("sticky_kit:stick"));if(r&&(null==d&&(d=m+k+b>g+q),!n&&d))return n=!0,"static"===e.css("position")&&e.css({position:"relative"}),a.css({position:"absolute",bottom:h,top:""}).trigger("sticky_kit:bottom")})};g=0;for(A=this.length;g<
    7    -1 A;g++)y=this[g],z(f(y));return this}}).call(this);
   -1     4 (function(){var a,t;a=this.jQuery;t=a(window);a.fn.stick_in_parent=function(f,g){var z,u,n,A,e,B;null==g&&(g={});a.isPlainObject(f)&&(g=f,f=void 0);n=g.sticky_class;u=g.inner_scrolling;null==u&&(u=!0);null==n&&(n="is_stuck");A=function(b,g,p,e,h){var m,q,k,v,c,d,w,x,r,y;d=b.parent();null!=f&&(d=d.closest(f));w=function(){var c,a;c=parseInt(d.css("border-top-width"),10);a=parseInt(d.css("padding-top"),10);g=parseInt(d.css("padding-bottom"),10);p=d.offset().top+c+a;e=d.height();return h=b.outerHeight(!0)};
   -1     5 w();if(h!==e)return k=b.css("float"),r=a("<div />").css({width:b.outerWidth(!0),height:h,display:b.css("display"),"float":k}),m=q=!1,v=void 0,c=0,x=!1,y=function(){var a,f,l,s;l=t.scrollTop();null!=v&&(f=l-v);v=l;q?(s=l+h+c>e+p,m&&!s&&(m=!1,b.css({position:"fixed",bottom:"",top:0}).trigger("sticky_kit:unbottom")),l<p&&(q=!1,c=0,"left"!==k&&"right"!==k||b.insertAfter(r),r.detach(),a={position:""},x&&(a.width=""),b.css(a).removeClass(n).trigger("sticky_kit:unstick")),u&&(a=t.height(),h>a&&!m&&(c-=f,
   -1     6 c=Math.max(a-h,c),c=Math.min(0,c),b.css({top:c+"px"})))):l>p&&(q=!0,a={position:"fixed",top:c},"none"===k&&"block"===b.css("display")&&(a.width=b.width()+"px",x=!0),b.css(a).addClass(n).after(r),"left"!==k&&"right"!==k||r.append(b),b.trigger("sticky_kit:stick"));if(q&&(null==s&&(s=l+h+c>e+p),!m&&s))return m=!0,"static"===d.css("position")&&d.css({position:"relative"}),b.css({position:"absolute",bottom:g,top:""}).trigger("sticky_kit:bottom")},t.on("scroll",y),a(document.body).on("sticky_kit:recalc",
   -1     7 function(){w();return y()})};e=0;for(B=this.length;e<B;e++)z=this[e],A(a(z));return this}}).call(this);