javascript - setTimeout 越来越快 - 我如何暂停它?
问题描述
我这里有这个脚本,效果很好。一旦元素滚动到视图中,它就会通过向上滚动来转换元素。但是一旦它滚动到视野之外,我就无法让它停止,更糟糕的是,它每次滚动到视野中时都会变得越来越快!如何重置超时?显然我使用 clearTimeout 错误,但我不知道如何解决它。
observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
reviewScroll();
} else {
stopReviewScroll();
//What do I put here to pause reviewScroll?
}
});
});
var reviewscroller = document.querySelector('.ReviewList__reviewCardContainer__1hiY0');
function reviewScroll() {
reviewscroller.style.opacity = 1;
i++;
reviewscroller.style.transform = 'translate3D(0px, -'+i+'px , 0px)';
opac = i * .001;
reviewscroller.style.opacity = 1-opac;
clearTimeout(setTimeout(reviewScroll, 40));
setTimeout(reviewScroll, 40);
if (reviewscroller.style.opacity < -0.25) {
reviewscroller.opacity = 1;
i = 0;
reviewscroller.style.transform = 'translate3D(0px, -'+i+'px , 0px)';
}
}
function stopReviewScroll() {
clearTimeout(reviewScroll);
}
document.querySelectorAll('.ReviewList__reviewCardContainer__1hiY0').forEach(image => { observer.observe(image); });
解决方案
您应该取消旧计时器并安装一个新计时器,如下所示:
var timerId = null;
function reviewScroll() {
// ...
if (timerId) {
clearTimeout(timerId);
}
timerId = setTimeout(reviewScroll, 40);
// ...
}
推荐阅读
- jquery - 防止可拖动的 div 彼此靠近
- linux - 如何修复“CMakeLists.txt (bison_target_or_gen) 处的 CMake 错误:”
- reactjs - Nginx 重写代理通行证(对于节点反应应用程序)
- python - 用户输入的困难并替换字母
- javascript - 怎么修选项
- spotfire - 如何将 Spotfire 仪表板嵌入网页
- c# - 对 Unity3D 进行单元测试时,测试类看不到被测类
- typo3 - 如何配置 extbase 以获取与 tt_content 的内联/IRRE 关系?
- javascript - combine 关键字 THIS 指的是组件 Angular, THIS 关键字指的是 javascript 函数
- mysql - 根据查询值更改假列