J'essaie de créer un effet de parallaxe par lequel un élément enfant positionné de façon absolue doit se déplacer à une vitesse plus lente que celle de son défilement.Effet de parallaxe - calcul du décalage de l'enfant par parent sur le défilement
L'enfant sera toujours la hauteur de 130% de la société mère, mais le parent peut être toute taille:
HTML:
<div class="parallax-window lg">
<div class="parallax-image image-1"></div>
<div class="parallax-content">Hello World</div>
</div>
<div class="parallax-window">
<div class="parallax-image image-2"></div>
<div class="parallax-content">Hello World</div>
</div>
CSS:
.parallax-window {
min-height: 300px;
position: relative;
overflow: hidden;
}
.parallax-window.lg {
min-height: 600px;
}
.parallax-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 130%;
background-size: cover;
background-repeat: no-repeat;
background-position: 50% 50%;
transform: translate3d(0, 0, 0);
z-index: -1;
}
.image-1 {
background-image: url(https://i.ytimg.com/vi/TbC-vUPMR7k/maxresdefault.jpg);
}
.image-2 {
background-image: url(https://i.ytimg.com/vi/xi5-YrAEChc/maxresdefault.jpg);
}
J'ai une formule pour déplacer l'image, mais mes mathématiques est clairement loin:
var win = $(window),
win_h = win.height(),
parallaxers = $('.parallax-window');
function scroll_events() {
var win_top = win.scrollTop(),
win_btm = win_top + win_h;
parallaxers.each(function() {
var cont = $(this),
cont_top = cont.offset().top,
cont_h = cont.height(),
cont_btm = cont_top + cont_h,
para = cont.find('.parallax-image'),
para_h = Math.round(cont_h * 1.3);
if (cont_btm > win_top && cont_top <= win_btm) {
var diff = (win_h - cont_h)/(win_h - para_h),
value = -Math.round((win_top * diff));
// para.css('transform', 'translate3d(0,' + value*-1 + 'px, 0)');
para.css('top', value + 'px');
}
});
}
Les images se déplacent, mais pas au bon taux.
L'image doit être alignée avec le haut du parent lorsque l'élément arrive pour la première fois dans la fenêtre. Ensuite, après le défilement, le bas de l'image doit être aligné avec le bas du parent lorsqu'il atteint le haut de la fenêtre.
Toute aide serait grandement appréciée!
VIOLON (https://jsfiddle.net/8dwLwgy7/1/)