Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

/*
Plugin: jQuery Parallax
Version 1.1.3
Author: Ian Lunn
Twitter: @IanLunn
Author URL: http://www.ianlunn.co.uk/
Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/

Dual licensed under the MIT and GPL licenses:
http://www.opensource.org/licenses/mit-license.php
http://www.gnu.org/licenses/gpl.html
*/


(function( $ ){
        var $window = $(window);
        var windowHeight = $window.height();

        $window.resize(function () {
                windowHeight = $window.height();
        });

        $.fn.parallax = function(xpos, speedFactor, outerHeight) {
                var $this = $(this);
                var getHeight;
                var firstTop;
                var paddingTop = 0;
               
                //get the starting position of each element to have parallax applied to it             
                $this.each(function(){
                    firstTop = $this.offset().top;
                });

                if (outerHeight) {
                        getHeight = function(jqo) {
                                return jqo.outerHeight(true);
                        };
                } else {
                        getHeight = function(jqo) {
                                return jqo.height();
                        };
                }
                       
                // setup defaults if arguments aren't specified
                if (arguments.length < 1 || xpos === null) xpos = "50%";
                if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1;
                if (arguments.length < 3 || outerHeight === null) outerHeight = true;
               
                // function to be called whenever the window is scrolled or resized
                function update(){
                        var pos = $window.scrollTop();                         

                        $this.each(function(){
                                var $element = $(this);
                                var top = $element.offset().top;
                                var height = getHeight($element);

                                // Check if totally above or totally below viewport
                                if (top + height < pos || top > pos + windowHeight) {
                                        return;
                                }

                                $this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px");
                        });
                }              

                $window.bind('scroll', update).resize(update);
                update();
        };
})(jQuery);