'How to Reverse 'ScrollY' Effect upon Scrolling Up
I am trying to make the line extends as someone scrolls down, and shrink as someone scrolls up. I am not sure what exactly missing for the JavaScript.
https://jsfiddle.net/nqu2L4mc/
JavaScript
// Timeline Begins
"use strict";
function qs(selector, all = false) {
return all ? document.querySelectorAll(selector) : document.querySelector(selector);
}
const sections = qs('.timeline_section', true);
const timeline = qs('.timeline');
const line = qs('.timeline_line');
line.style.bottom = `calc(100%)`;
let prevScrollY = window.scrollY;
let up, down;
let full = false;
let set = 0;
const targetY = window.innerHeight * .8;
function scrollHandler(e) {
const {
scrollY
} = window;
up = scrollY < prevScrollY;
down = !up;
const timelineRect = timeline.getBoundingClientRect();
const lineRect = line.getBoundingClientRect(); // const lineHeight = lineRect.bottom - lineRect.top;
const dist = targetY - timelineRect.top;
console.log(dist);
if (down && !full) {
set = Math.max(set, dist);
line.style.bottom = `calc(100% - ${set}px)`;
}
if (dist > timeline.offsetHeight + 50 && !full) {
full = true;
line.style.bottom = `-50px`;
}
sections.forEach(item => {
// console.log(item);
const rect = item.getBoundingClientRect(); // console.log(rect);
if (rect.top + item.offsetHeight / 5 < targetY) {
item.classList.add('show-me');
}
}); // console.log(up, down);
prevScrollY = window.scrollY;
}
scrollHandler();
line.style.display = 'block';
window.addEventListener('scroll', scrollHandler);
// Timeline Ends
It would be great if someone can edit the code directly.
Thanks in advance
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
