(function($){ $.fn.paraslimy = function(options){ var option = { background: '.background', perspect: 250, }; var static = { body: 'paraslimy-body', bg: 'paraslimy-bg', }; var config = $.extend(option, options); var inc = $(this), win = $(window), scrolling = false; var paraslimy = (function(){ return{ init: function(){ inc.addClass(static.body) .children(config.background).addClass(static.bg); $('.' + static.body).css({ 'perspective': config.perspect + 'px', 'transform-style': 'preserve-3d' }) .children('.' + static.bg).css({ 'transform': 'translateZ(' + ( config.perspect * -1 ) + 'px)' }); paraslimy.move(); paraslimy.clip(); }, clip: function(){ win.bind('scroll', function(){ paraslimy.move(); }); }, move: function(){ if( ! scrolling ) { scrolling = true; requestAnimationFrame(function(){ scrolling = false; $('.' + static.body).each(function(n){ $(this).css({ 'perspective-origin': '0%' + ' ' + paraslimy.calc($(this)) + '%' }); }); }); } }, calc: function(target){ var rate = ( $(window).scrollTop() - target.offset().top ) / target.outerHeight(true) * 100; return rate; } }; })(); paraslimy.init(); return(this); }; })(jQuery); (function($){ $(document).ready(function(){ $('.parallax').paraslimy({ background: '.background-image', // background layer. }); }); })(jQuery);