archive
/
simparallax
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
simparallax/parallax.js

65 lines
2.4 KiB
JavaScript

var Parallax = {
initialise: function(createEvents) {
$(this.ident).each(function(){
// Calculate Offset
inset = $(this).attr('parallax-inset');
image_height = $(this).height();
range = image_height / inset;
$(this).attr('parallax-offset', range / 2);
});
console.log("Parallax Initialised.");
if (createEvents) {this.createEvents();}
this.calculate();
},
calculate: function() {
window_top = $(window).scrollTop();
window_bottom = window_top + $(window).height();
$(this.ident).each(function(){
if (!is_on_screen(this) || !$(this).attr('parallax-offset') != false) { return; }
element = $(this);
center_pos = (element.offset().top - $(window).scrollTop()) + (element.height() / 2);
perc = -(0.5 - ((window_top - center_pos) / window_bottom));
pos = Math.round((perc * element.attr('parallax-offset')) * 100) / 100;
element.css('background-position',"0px " + pos + "px");
});
},
createEvents: function() {
$(window).scroll(function() { Parallax.calculate(); });
$(window).resize(function() { Parallax.initialise(); })
},
ident: '.parallax'
}
function is_on_screen(elm) {
var vpH = $(window).height(),
st = $(window).scrollTop(),
y = $(elm).offset().top,
elementHeight = $(elm).height();
return ((y < (vpH + st)) && (y > (st - elementHeight)));
}
function init_parallax() {
$('.parallax').each(function(){
// Calculate Offset
inset = $(this).attr('parallax-inset');
image_height = $(this).height();
range = image_height / inset;
$(this).attr('parallax-offset', range / 2);
});
console.log("Parallax Initialised.");
parallax();
}
function parallax() {
window_top = $(window).scrollTop();
window_bottom = window_top + $(window).height();
$('.parallax').each(function(){
if (!is_on_screen(this) || !$(this).attr('parallax-offset') != false) { return; }
element = $(this);
center_pos = (element.offset().top - $(window).scrollTop()) + (element.height() / 2);
perc = -(0.5 - ((window_top - center_pos) / window_bottom));
pos = Math.round((perc * element.attr('parallax-offset')) * 100) / 100;
element.css('background-position',"0px " + pos + "px");
});
}