-
-
Save ciptard/24b93160b117d196899b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* background setup */ | |
.background { | |
background-repeat:no-repeat; | |
/* custom background-position */ | |
background-position:50% 50%; | |
/* ie8- graceful degradation */ | |
background-position:50% 50%9 !important; | |
} | |
/* fullscreen setup */ | |
html, body { | |
/* give this to all tags from html to .fullscreen */ | |
height:100%; | |
} | |
.fullscreen, | |
.content-a { | |
width:100%; | |
min-height:100%; | |
} | |
.not-fullscreen, | |
.not-fullscreen .content-a, | |
.fullscreen.not-overflow, | |
.fullscreen.not-overflow .content-a { | |
height:100%; | |
overflow:hidden; | |
} | |
/* content centering styles */ | |
.content-a { | |
display:table; | |
} | |
.content-b { | |
display:table-cell; | |
position:relative; | |
vertical-align:middle; | |
text-align:center; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* detect touch */ | |
if("ontouchstart" in window){ | |
document.documentElement.className = document.documentElement.className + " touch"; | |
} | |
if(!$("html").hasClass("touch")){ | |
/* background fix */ | |
$(".parallax").css("background-attachment", "fixed"); | |
} | |
/* fix vertical when not overflow | |
call fullscreenFix() if .fullscreen content changes */ | |
function fullscreenFix(){ | |
var h = $('body').height(); | |
// set .fullscreen height | |
$(".content-b").each(function(i){ | |
if($(this).innerHeight() <= h){ | |
$(this).closest(".fullscreen").addClass("not-overflow"); | |
} | |
}); | |
} | |
$(window).resize(fullscreenFix); | |
fullscreenFix(); | |
/* resize background images */ | |
function backgroundResize(){ | |
var windowH = $(window).height(); | |
$(".background").each(function(i){ | |
var path = $(this); | |
// variables | |
var contW = path.width(); | |
var contH = path.height(); | |
var imgW = path.attr("data-img-width"); | |
var imgH = path.attr("data-img-height"); | |
var ratio = imgW / imgH; | |
// overflowing difference | |
var diff = parseFloat(path.attr("data-diff")); | |
diff = diff ? diff : 0; | |
// remaining height to have fullscreen image only on parallax | |
var remainingH = 0; | |
if(path.hasClass("parallax") && !$("html").hasClass("touch")){ | |
var maxH = contH > windowH ? contH : windowH; | |
remainingH = windowH - contH; | |
} | |
// set img values depending on cont | |
imgH = contH + remainingH + diff; | |
imgW = imgH * ratio; | |
// fix when too large | |
if(contW > imgW){ | |
imgW = contW; | |
imgH = imgW / ratio; | |
} | |
// | |
path.data("resized-imgW", imgW); | |
path.data("resized-imgH", imgH); | |
path.css("background-size", imgW + "px " + imgH + "px"); | |
}); | |
} | |
$(window).resize(backgroundResize); | |
$(window).focus(backgroundResize); | |
backgroundResize(); | |
/* set parallax background-position */ | |
function parallaxPosition(e){ | |
var heightWindow = $(window).height(); | |
var topWindow = $(window).scrollTop(); | |
var bottomWindow = topWindow + heightWindow; | |
var currentWindow = (topWindow + bottomWindow) / 2; | |
$(".parallax").each(function(i){ | |
var path = $(this); | |
var height = path.height(); | |
var top = path.offset().top; | |
var bottom = top + height; | |
// only when in range | |
if(bottomWindow > top && topWindow < bottom){ | |
var imgW = path.data("resized-imgW"); | |
var imgH = path.data("resized-imgH"); | |
// min when image touch top of window | |
var min = 0; | |
// max when image touch bottom of window | |
var max = - imgH + heightWindow; | |
// overflow changes parallax | |
var overflowH = height < heightWindow ? imgH - height : imgH - heightWindow; // fix height on overflow | |
top = top - overflowH; | |
bottom = bottom + overflowH; | |
// value with linear interpolation | |
var value = min + (max - min) * (currentWindow - top) / (bottom - top); | |
// set background-position | |
var orizontalPosition = path.attr("data-oriz-pos"); | |
orizontalPosition = orizontalPosition ? orizontalPosition : "50%"; | |
$(this).css("background-position", orizontalPosition + " " + value + "px"); | |
} | |
}); | |
} | |
if(!$("html").hasClass("touch")){ | |
$(window).resize(parallaxPosition); | |
//$(window).focus(parallaxPosition); | |
$(window).scroll(parallaxPosition); | |
parallaxPosition(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="fullscreen background parallax" style="background-image:url('http://www.minimit.com/images/picjumbo.com_IMG_6648.jpg');" data-img-width="1600" data-img-height="1064" data-diff="100"> | |
<div class="content-a"> | |
<div class="content-b"> | |
Centered content | |
</div> | |
</div> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment