JSFiddle - React, Tailwind, and code Playground
by Van Hai Le
HTML
<div class="container">
<div id="result"></div>
</div>
<p class="box">What about getting back for more?</p>
<!-- <div class="box">
</div>
-->
<div class="container"></div>
CSS
.container {
width: 100%;
height: 1000px;
position: relative;
}
#result {
position: fixed;
}
.box {
/* height: 100px;
width: 100%;
background: pink; */
position: relative;
top: -0px;
opacity: 0;
transition: all 1s linear;
}
p {
margin: 0;
}
JavaScript
let box = document.querySelector('.box');
let boxTop = box.offsetTop;
document.getElementById('result').innerHTML = window.pageYOffset + window.innerHeight;
function elementInViewport(el) {
var top = el.offsetTop;
var left = el.offsetLeft;
var width = el.offsetWidth;
var height = el.offsetHeight;
while(el.offsetParent) {
el = el.offsetParent;
top += el.offsetTop;
left += el.offsetLeft;
}
return (
top >= window.pageYOffset &&
left >= window.pageXOffset &&
(top + height) <= (window.pageYOffset + window.innerHeight) &&
(left + width) <= (window.pageXOffset + window.innerWidth)
);
}
document.addEventListener('scroll', function() {
document.getElementById('result').innerHTML = (window.innerHeight ) + ' ' + boxTop + ' ' + window.pageYOffset + ' ' + (window.pageYOffset + window.innerHeight);
console.log(window.pageYOffset + window.innerHeight);
let test = window.pageYOffset + window.innerHeight;
//if (elementInViewport(box)) {
if (window.pageYOffset < boxTop && window.pageYOffset >= boxTop - window.innerHeight) {
box.style.opacity = '1';
box.style.top = '0';
} else {
box.style.opacity = '0';
box.style.top ='-10px';
}
});