Reputation: 401
I am new to javascript, and I have encountered difficulties and hope to get your help! My English is not good, but I try to describe my problem completely!
I hope the load() function can be triggered when the mouse scrolls to the bottom , How can the load() event be triggered when the mouse scrolls to the bottom?
Thank you for your help~
function show(){
let scrollposition = 0;
const el = document.querySelector('.demo');
el.addEventListener('scroll',function(e){
console.log('123');
load();
// let a = el.target.scrollTop;
// let b = el.target.innerHeight;
// let c = el.target.scrollHeight;
// if(currentscrollposition + windows >= total){
// console.log('bottom');
// }
})
}
show();
function load(){
let el = document.querySelector('.load');
el.style.display = 'block';
}
// // load()
.demo{
width: 200px;
height: 300px;
overflow-y:scroll;
background-color: #fff;
}
.item{
list-style:none;
padding:20px;
border:1px solid #ccc;
}
.load{
width:100%;
margin: 0 auto;
display: none;
}
<ul class="demo">
<li class="item">article1</li>
<li class="item">article2</li>
<li class="item">article3</li>
<li class="item">article4</li>
<li class="item">article5</li>
<li class="item">article6</li>
<li class="item">article7</li>
<li class="item">article8</li>
<li class="item">article9</li>
<li class="item">article10</li>
<!-- load -->
<svg class="load" version="1.1" id="loader-1" x="0px" y="0px"
width="40px" height="40px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<path fill="#000" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z">
<animateTransform attributeType="xml"
attributeName="transform"
type="rotate"
from="0 25 25"
to="360 25 25"
dur="0.6s"
repeatCount="indefinite"/>
</path>
</svg>
</ul>
Upvotes: 0
Views: 65
Reputation: 884
If you want to call a function when scroll get the bottom of the list you should get the position of the last child and scroll position and when scroll reach the last child then call the function.
function show() {
let scrollposition = 0;
const ul = document.querySelector('.demo');
ul.addEventListener('scroll', function(e) {
var li = ul.children[ul.children.length - 2];
if (ul.scrollTop + ul.offsetHeight > li.offsetTop) {
document.getElementById('loading').innerHTML = "loading...";
load();
}
else{
document.getElementById('loading').innerHTML = "";
}
})
}
show();
function load() {
let el = document.querySelector('.load');
el.style.display = 'block';
}
// // load()
#loading {
width: 100px;
float: right;
}
.demo {
width: 200px;
height: 300px;
overflow-y: scroll;
background-color: #fff;
}
.item {
list-style: none;
padding: 20px;
border: 1px solid #ccc;
}
.load {
width: 100%;
margin: 0 auto;
display: none;
}
<div id="loading">
</div>
<ul id="demo" class="demo">
<li class="item">article1</li>
<li class="item">article2</li>
<li class="item">article3</li>
<li class="item">article4</li>
<li class="item">article5</li>
<li class="item">article6</li>
<li class="item">article7</li>
<li class="item">article8</li>
<li class="item">article9</li>
<li class="item">article10</li>
<!-- load -->
<svg class="load" version="1.1" id="loader-1" x="0px" y="0px" width="40px" height="40px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<path fill="#000" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z">
<animateTransform attributeType="xml"
attributeName="transform"
type="rotate"
from="0 25 25"
to="360 25 25"
dur="0.6s"
repeatCount="indefinite"/>
</path>
</svg>
</ul>
Upvotes: 1
Reputation: 993
I hope it helps you:
var currPos = window.scrollY;
document.addEventListener('scroll', () => {
if (window.scrollY < currPos) {
//scroll up
console.log('Scroll Up');
} else {
//scroll down
console.log('Scroll Down');
}
currPos = window.scrollY;
});
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<header>Header</header>
<main>
<ol>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
<li>List Element</li>
</ol>
</main>
<footer>Footer</footer>
</body>
</html>
Upvotes: 3