/*! * Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) * backgroundPosition cssHook for jquery. Necessary to combat different css property names between browsers * https://github.com/brandonaaron/jquery-cssHooks * Licensed under the MIT License (LICENSE.txt). */ (function($) { // backgroundPosition[X,Y] get hooks var $div = $('
'); $.support.backgroundPosition = $div.css('backgroundPosition') === "3px 5px" ? true : false; $.support.backgroundPositionXY = $div.css('backgroundPositionX') === "3px" ? true : false; $div = null; var xy = ["X","Y"]; // helper function to parse out the X and Y values from backgroundPosition function parseBgPos(bgPos) { var parts = bgPos.split(/\s/), values = { "X": parts[0], "Y": parts[1] }; return values; } if (!$.support.backgroundPosition && $.support.backgroundPositionXY) { $.cssHooks.backgroundPosition = { get: function( elem, computed, extra ) { return $.map(xy, function( l, i ) { return $.css(elem, "backgroundPosition" + l); }).join(" "); }, set: function( elem, value ) { $.each(xy, function( i, l ) { var values = parseBgPos(value); elem.style[ "backgroundPosition" + l ] = values[ l ]; }); } }; } if ($.support.backgroundPosition && !$.support.backgroundPositionXY) { $.each(xy, function( i, l ) { $.cssHooks[ "backgroundPosition" + l ] = { get: function( elem, computed, extra ) { var values = parseBgPos( $.css(elem, "backgroundPosition") ); return values[ l ]; }, set: function( elem, value ) { var values = parseBgPos( $.css(elem, "backgroundPosition") ), isX = l === "X"; elem.style.backgroundPosition = (isX ? value : values[ "X" ]) + " " + (isX ? values[ "Y" ] : value); } }; $.fx.step[ "backgroundPosition" + l ] = function( fx ) { $.cssHooks[ "backgroundPosition" + l ].set( fx.elem, fx.now + fx.unit ); }; }); } })(jQuery); /*! * Scroll-based parallax plugin for jQuery * Copyright (c) 2011 Dave Cranwell (http://davecranwell.com) * Licensed under the MIT License. * 2011-05-18 * version 1.0 */ (function($){ $.fn.scrollParallax = function(options) { var settings = { 'speed': 0.2, 'axis': 'x,y', 'debug': false } function debug(msg){ if(settings.debug && 'console' in window && 'log' in window.console){ console.log(msg); } } return this.each(function() { //defined accessible $this var in standard way for use within functions var $this = $(this); //extend options in standard way if (options) { $.extend(settings, options); } $this.bind('inview', function (event, visible) { if (visible == true) { $this.addClass("inview"); debug("in view"); }else{ $this.removeClass("inview"); debug("out of view"); } }); //find current position so parallax can be relative to it var currentPosArray=$this.css("backgroundPosition").split(" "); var currentXPos=parseInt(currentPosArray[0].replace(/[^0-9\-]/g, "")); var currentYPos=parseInt(currentPosArray[1].replace(/[^0-9\-]/g, "")); //recalculate position on scroll $(window).bind('scroll', function(){ if($this.hasClass("inview")){ var offset = $this.offset(); //calculate new position if(settings.axis.match(/x/)){ var Xpos = offset.left - $(window).scrollLeft(); var newXPos = (-(Xpos) * settings.speed) + currentXPos; }else{ var newXPos = currentXPos; } if(settings.axis.match(/y/)){ var Ypos = offset.top - $(window).scrollTop(); var newYPos = (-(Ypos) * settings.speed) + currentYPos; }else{ var newYPos = currentYPos; } debug("new X position: "+ newXPos); debug("new Y position: "+ newYPos); $this.css({'backgroundPosition': parseInt(newXPos) + "px " + parseInt(newYPos) +"px"}); } }); }); }; })(jQuery);