var scrollPos, sectionHeight, imgWrapStop, scrollSection = $('.imac-scrolling'), imac = scrollSection.find('.retina-imac'), imacWrap = $('.imac-container'), imacOffset = imac.offset().top, $window = $(window); setVars = function(){ scrollPos = $window.scrollTop(); sectionHeight = scrollSection.outerHeight(); imgWrapStop = ((imacOffset + sectionHeight) - (imac.outerHeight())); } toggleFixed = function(img, imgWrap, imgTop){ var isFixed = scrollSection.hasClass('fixed'); if (scrollPos >= imgTop && !isFixed && scrollPos <= imgWrapStop) { // When we're in the zone imgWrap.addClass('fixed'); img.css({ top:0, bottom: 'auto' }); } else if (scrollPos >= imgWrapStop) { // when we're out of the zone img.css({ bottom:0, top: 'auto' }); imgWrap.removeClass('fixed'); } else { imgWrap.removeClass('fixed'); } } translateScroll = function(selector, value, startPos, endPos) { if (scrollPos > startPos && scrollPos < endPos) { // Only run if we're in the zone var disToScroll = (startPos - endPos), disScrolled = (scrollPos - startPos), // Distance already scrolled transY = ((value / disToScroll) * disScrolled ), transYround = +transY.toFixed(2), transCss = 'translate3d( 0, ' + transYround +'px, ' + '0)'; function prefixTransform(selector, translate) {// prefixer function selector.css('transform', translate); selector.css('-moz-transform', translate); selector.css('-webkit-transform', translate); selector.css('-o-transform', translate); selector.css('-ms-transform', translate); } prefixTransform(selector, transCss); } } scrollFix = function(){ window.requestAnimationFrame(function(){ setVars(); toggleFixed(imac, imacWrap, imacOffset); translateScroll(imac, 50, imacOffset, imgWrapStop); }); } init = function(){ scrollIntervalID = setInterval(scrollFix, 10);} init();