javascript - javascript Bootstrap 进度条填写 10 秒
问题描述
我在 Bootstrap 中有一个进度条,每 1 秒填充 10% 的进度条。
问题是,该网站落后于整个浏览器(chrome),但为什么呢?
这是我填充进度条的代码
var isPaused = false;
$(window).scroll(function(){
var ScrollTop = parseInt($(window).scrollTop());
if (ScrollTop > 10) {
isPaused = true;
} else {
isPaused = false;
}
});
var timeleft = 1;
var table_updated = 0;
var timeleft_zahl = 10;
var tick = function() {
if(!isPaused && $("#page-1").hasClass("active") && !$(".modal").hasClass("show")) {
document.getElementById("progressBar").style.width = timeleft*10+"%";
document.getElementById("refreshcountdown").innerHTML = timeleft_zahl-1;
timeleft += 1;
timeleft_zahl -= 1;
if(timeleft >= 11){
notificationcheck();
timeleft = 0;
timeleft_zahl = 11;
if(table_updated >= 10) {
location.reload();
table_updated = 0;
} else {
get_table_data(1);
table_updated += 1;
}
}
}
}
timer = setInterval(tick, 1000);
所以这很简单。我有几个选项,比如isPaused
和其他一些停止进度条填充的东西,当用户滚动时,它必须停止。
但为什么会滞后?间隔每 1000 次(所以 1 秒)运行一次,如果 isPaused 为假,则每 1 秒填充 10%,如果事情正确,则另一个
解决方案
您的tick
函数每秒调用一次,因此只有每秒才会决定是否增加进度条。
我猜你发现的“滞后”只是想象的,因为你的滚动永远不会像 1、3 或 5 秒那样精确,而是像 1.4 或 3.8 秒那样。因此,您认为进度条的增加是延迟的,因为它需要一些毫秒才能tick
再次调用该函数。
为了避免这种影响,您可以添加一个在不执行滚动时(换句话说,当滚动停止时)触发的侦听器。在这种情况下,您应该重置该setInterval
功能。
推荐阅读
- haskell - Haskell项目的编译优化问题
- javascript - Javascript 最多计数
- php - Laravel Eloquent - 基于子关系属性排序父级
- angular - 使用 asp .net core 3 API 登录 Angular SPA,无需在 SPA 之外重定向
- mysql - 如何使用 where in 选择所有数据相同的 id
- swift - watchos 有时不显示图像
- c# - 如何在不同的解决方案中使用区域(在 MVC 中)
- javascript - 取消注册 AngularJS 中的事件
- ios - 在滚动表格视图时,标签的角半径变得扭曲
- symfony - 如何在表单顶部显示 craueFormFlow 按钮