jQuery(document).ready(function($) { parallax_box = $('.parallax-box'); if (parallax_box.length > 0) { ParallaxBox(); } function ParallaxBox() { var windowSelector = $(window), documentSelector = $(document), documentWidth = documentSelector.width(), windowHeight = windowSelector.height(), liteMode = false, ieVersion = getInternetExplorerVersion(), ds = document.documentElement; if (!device.mobile() && !device.tablet()) { liteMode = false; if (ieVersion !=-1 && ieVersion < 9) { liteMode = true; } } else { liteMode = true; } parallax_box.each(function() { parallaxBox($(this)); }); function parallaxBox(obj) { var obj_bg = obj.find('.parallax-bg'), type = obj_bg.data('parallax-type'), obj_bg_inner, img, originalWidth = 0, originalHeight = 0, img_url = obj_bg.data('img-url'), bufferRatio = obj_bg.data('speed'), parallaxInvert = obj_bg.data('invert'), parallaxType = 'parallax_normal', objHeight = obj.height(), objOffsetTop = obj.offset().top, baseHeight = 0, parallax = true; switch (type) { case 'image': loadImg(); break case 'video': obj_bg_inner = $('.parallax_media', obj_bg); if (liteMode) { obj_bg_inner.remove(); loadImg(); } else { loadVideo(); } break } function loadImg() { if (img_url) { img = new Image(); img.src = img_url; img.onload = function () { originalWidth = img.width; originalHeight = img.height; imgBlocksStructure = !liteMode ? "
" : ""; obj_bg.append(imgBlocksStructure); obj_bg_inner = $('.parallax-img', obj_bg); if (!liteMode) { obj_bg_inner.css('background-image', 'url(' + (img_url) + ')'); } else { obj_bg_inner.attr('src', img_url); bufferRatio = 'none'; } initParallax(); } } } function loadVideo() { var videoElement = obj_bg_inner.get(0); videoElement.load(); videoElement.play(); originalWidth = videoElement.videoWidth; originalHeight = videoElement.videoHeight; if (img_url) { img = new Image(); img.src = img_url; img.onload = function () { originalWidth = originalWidth == 0 ? img.width : originalWidth; originalHeight = originalHeight == 0 ? img.height : originalHeight; objectResize(obj_bg_inner, documentWidth, baseHeight, originalWidth, originalHeight); } } videoElement.onloadeddata = function() { originalWidth = videoElement.videoWidth; originalHeight = videoElement.videoHeight; objectResize(obj_bg_inner, documentWidth, baseHeight, originalWidth, originalHeight); } initParallax(); } function initParallax() { if (!parallaxInvert) { parallaxType = 'parallax_normal'; } else { parallaxType = 'parallax_invert'; } switch (bufferRatio) { case 'low': bufferRatio = 3; break case 'normal': bufferRatio = 2.25; break case 'hight': bufferRatio = 1.5; break case 'fixed': if (ieVersion != -1) { if (type != 'video') { parallax = false; obj_bg_inner.css({backgroundAttachment:'fixed'}); } else { console.log('ie'); parallaxType = 'parallax_normal'; bufferRatio = 2.25; } } else { parallaxType = 'parallax_fixes'; bufferRatio = 1; } break case 'none': parallax = false; parallaxType = 'parallax_none'; break default: bufferRatio = 2.25; if (bufferRatio > 5) { bufferRatio = 5; } if (bufferRatio <= 1) { if ($.browser.msie) { parallax = false; obj_bg_inner.css({backgroundAttachment:'fixed'}); } else { parallaxType = 'parallax_fixes'; bufferRatio = 1; } } break } windowSelector.resize(parallaxObjResize); parallaxObjResize(); if (!liteMode) { windowSelector.scroll(parallaxMove); } } function parallaxObjResize() { documentWidth = documentSelector.width(); windowHeight = windowSelector.height(); objHeight = obj.height(); obj_bg.width(documentWidth); obj_bg.css({'width' : documentWidth, 'margin-left' : Math.floor(documentWidth*-0.5), 'left' : '50%'}); baseHeight = getBaseHeight(parallaxType, objHeight, bufferRatio); objectResize(obj_bg_inner, documentWidth, baseHeight, originalWidth, originalHeight); if (!liteMode) { parallaxMove(); } } function parallaxMove() { if (parallax && !liteMode) { var documentScrollTop, startScrollTop, endScrollTop; objOffsetTop = obj.offset().top; documentScrollTop = documentSelector.scrollTop(); startScrollTop = documentScrollTop + windowHeight; endScrollTop = documentScrollTop - objHeight; if ((startScrollTop > objOffsetTop) && (endScrollTop < objOffsetTop)) { y = documentScrollTop - objOffsetTop; if (!parallaxInvert) { newPositionTop = parseInt(y / bufferRatio); } else { newPositionTop = -parseInt(y / bufferRatio) - parseInt(windowHeight / bufferRatio) } obj_bg_inner.css({top: newPositionTop + 'px'}); } } } } function objectResize(obj, baseWidth, baseHeight, originalWidth, originalHeight ) { var imageRatio, originalWidth, originalHeight, newImgWidth, newImgHeight, newImgTop, newImgLeft; imageRatio = originalHeight/originalWidth; containerRatio = baseHeight/baseWidth; if (containerRatio > imageRatio) { newImgHeight = baseHeight; newImgWidth = Math.round((newImgHeight*originalWidth) / originalHeight); } else { newImgWidth = baseWidth; newImgHeight = Math.round((newImgWidth*originalHeight) / originalWidth); } newImgLeft =- (newImgWidth-baseWidth) * .5; newImgTop =- (newImgHeight-baseHeight) * .5; obj.css({width: newImgWidth, height: newImgHeight, marginTop: newImgTop, marginLeft: newImgLeft}); } function getBaseHeight(parallaxType, objHeight, bufferRatio) { var newBaseHeight = 0; switch (parallaxType) { case 'parallax_normal': newBaseHeight = objHeight + parseInt((windowHeight - objHeight)/bufferRatio); break case 'parallax_invert': newBaseHeight = objHeight + parseInt((windowHeight + objHeight)/bufferRatio); break case 'parallax_fixes': newBaseHeight = windowHeight; break case 'parallax_none': newBaseHeight = objHeight; break } return newBaseHeight; } function getInternetExplorerVersion() { var rv = -1; if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent, re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) { rv = parseFloat(RegExp.$1); } } else if (navigator.appName == 'Netscape') { var ua = navigator.userAgent, re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) { rv = parseFloat(RegExp.$1); } } return rv; } } });