Tip: Click lines to highlight, hold ctrl/cmd to multi-select

http://codedumper.com/iribu (17-Feb @ 17:30)

Syntax Highlighted Code

  1. (function( $ ) {
  2.  
  3. // http://codedumper.com/azoku
  4.  
  5. var win = $( window ),
  6.     winTop,
  7.     elems = [],
  8.     bound = false;
  9.  
  10. function normalize( val ) {
  11.     return $.isFunction( val ) ? val() : val;
  12. }
  13.  
  14. function position() {
  15.     var currentTop = this.elem.offset().top,
  16.         options = this.options,
  17.         min = normalize( options.min );
  18.  
  19.     if ( windowTop > min || currentTop > min ) {
  20.         var top = Math.max( windowTop, min );
  21.         if ( options.max ) {
  22.             top = Math.min( top, normalize(options.max) );
  23.         }
  24.         this.elem.stop().animate({
  25.             top: top
  26.         }, 200);
  27.     }
  28. }
  29.  
  30. $.fn.floatFixed = function( options ) {
  31.     options = $.extend( { min: "auto" }, options );
  32.     // TODO: make this work with multiple elements
  33.     if ( options.min === "auto" ) {
  34.         options.min = self.offset().top;
  35.     }
  36.  
  37.     this.each(function() {
  38.         elems.push({ elem: $(this), options: options });
  39.     });
  40.  
  41.     if ( !bound ) {
  42.         win.scroll(function() {
  43.             windowTop = win.scrollTop();
  44.             $.each( elems, position );
  45.         });
  46.     }
  47.  
  48.     return this;
  49. };
  50.  
  51. })( jQuery );
  52.  

Plain Code

(function( $ ) {

// http://codedumper.com/azoku

var win = $( window ),
    winTop,
    elems = [],
    bound = false;

function normalize( val ) {
    return $.isFunction( val ) ? val() : val;
}

function position() {
    var currentTop = this.elem.offset().top,
        options = this.options,
        min = normalize( options.min );

    if ( windowTop > min || currentTop > min ) {
        var top = Math.max( windowTop, min );
        if ( options.max ) {
            top = Math.min( top, normalize(options.max) );
        }
        this.elem.stop().animate({
            top: top
        }, 200);
    }
}

$.fn.floatFixed = function( options ) {
    options = $.extend( { min: "auto" }, options );
    // TODO: make this work with multiple elements
    if ( options.min === "auto" ) {
        options.min = self.offset().top;
    }

    this.each(function() {
        elems.push({ elem: $(this), options: options });
    });

    if ( !bound ) {
        win.scroll(function() {
            windowTop = win.scrollTop();
            $.each( elems, position );
        });
    }

    return this;
};

})( jQuery );

Permalink: http://codedumper.com/iribu