我正在制作我的作品集网站。当用户滚动到指定部分时,我想添加一个css类。(我想使用Javascript事件)
例如,首先使用css隐藏一个元素,然后当用户向下滚动到该部分时,使用vanilla Javascript显示该元素。
<div id="info"> info... </div>
#info { display :none;}
正在加载Javascript代码?...
发布于 2019-12-05 23:05:07
这是一个大问题,你可以使用Intersection Observer,但并不是所有的浏览器都支持它,另一种方法是在窗口上使用滚动事件。
function debounce(func, wait = 20, immediate = true) {
let timeout
return function() {
let context = this,
args = arguments
let later = function() {
timeout = null
if (!immediate) func.apply(context, args)
}
let callNow = immediate && !timeout
clearTimeout(timeout)
timeout = setTimeout(later, wait)
if (callNow) func.apply(context, args)
}
}
const images = document.querySelectorAll('img')
function checkSlide(e) {
images.forEach(img => {
const slideInAt = window.scrollY + window.innerHeight - img.height / 2
const imageBottom = img.offsetTop + img.height
const isHalfShown = slideInAt > img.offsetTop
const isNotScrolledPast = window.scrollY < imageBottom
if (isHalfShown && isNotScrolledPast) {
img.classList.add('active')
} else {
img.classList.remove('active')
}
})
}
window.addEventListener('scroll', debounce(checkSlide))
这是我跟随Wes Bos的javascript30课程编写的代码,我强烈推荐它是免费的
摘要:
函数去反跳是为了停止调用事件的次数过多,超过需要的次数。
const图像是我的dom上的所有图像,我正在检查图像,但你可以检查你想检查的任何div。
checkSlide函数检查我是否已经到达并且没有传递每个图像,你可以在这里检查你想要的每个div。
发布于 2019-12-05 23:28:39
您可以跟踪窗口的滚动位置和目标元素的顶部位置。然后,当元素达到某个点(例如,窗口高度的一半)时,可以为其提供一个类来修改一些css属性,如opacity
或display
。
let targets = document.querySelectorAll('.target');
window.addEventListener("scroll", function(){
let doc = document.documentElement;
let top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
let windowHeight = window.innerHeight;
for (i = 0; i < targets.length; ++i) {
let target = targets[i];
if(target.offsetTop < (top + (windowHeight/2))) {
target.classList.add("visible");
}
else {
target.classList.remove("visible");
}
}
});
看看这个demo。
https://stackoverflow.com/questions/59197754
复制相似问题