注意:我需要使用纯javascript来实现此功能,我知道jquery中有一个.one()
方法可以做到这一点,但我需要在纯javascript中获得相同的输出。
场景:我试图在用户滚动并达到页面的3/4部分或更多时调用一个函数,但当用户达到该部分时出现问题,我们都知道他们不能完美像素,所以,在满足条件后,该函数将每个像素滚动执行。
我希望只有满足条件后才会执行一次,然后在页面底部添加一个部分,然后再次让用户到达底部,函数应该只被执行一次,依此类推...
片段:
var colors = ['skyblue', 'powderblue', 'lightgreen', 'indigo', 'coral'];
var addPage = function() {
var page = document.createElement('div');
page.classList.add('page');
page.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];
document.body.append(page);
console.log('added a new page');
}
var scrollAndAdd = function() {
if (window.scrollY < (window.innerHeight * (3 / 4))) {
// execute addPage only once for each attempt; it's creating infinite pages
addPage();
}
}
window.addEventListener('scroll', scrollAndAdd);
* {
margin: 0;
padding: 0;
}
.page {
height: 100vh;
}
<div class='page' style='background-color: lightgreen'></div>
<div class='page' style='background-color: skyblue'></div>
200vh
(因为1页是100vh
),假设用户滚动到了190vh
甚至更低,那么就会添加一个新页面,正文的总高度现在变成了300vh
,现在用户滚动到了290vh
以及更多,另一页应该被添加,以此类推... - TowkiraddPage
的末尾添加addPage = () => {};
。 - Bergi