进度条搭配返回按钮时功能异常的技术问询
嘿,我来帮你拆解这个进度条的问题!先把你贴的代码片段规整成可阅读的格式:
var teilprozentraw = $('.question1').length; teilprozent = 100 / teilprozentraw; var procentbar = 0; var width = 0; var step = 1; var mainDiv = document.getElementById('status-bar'); var childspan = mainDiv.getElementsByTagName('span')[1]; var childdiv = childspan.getEleme... // 这里代码没写完哦
从现有代码和你描述的「功能异常且表现怪异」来看,我先给你几个大概率的排查方向:
未完成的DOM获取代码:你最后一行的
getEleme...明显是没写完的(应该是getElementsByTagName或者querySelector之类的方法吧?)。如果这一步没正确获取到进度条的填充容器,后续的宽度赋值操作就会失效,甚至抛出错误,表现出怪异的行为。先把这部分补全,尽量用类名而非索引获取元素(比如childspan.querySelector('.progress-fill')),避免DOM结构变动导致的元素获取错误。除数为0的NaN风险:
teilprozent = 100 / teilprozentraw这行,如果.question1元素的数量是0,teilprozentraw就是0,计算出来的teilprozent会变成NaN。后续用这个值去累加进度的话,width也会变成NaN,进度条自然会表现异常。建议加个判断:var teilprozent = teilprozentraw > 0 ? 100 / teilprozentraw : 0;DOM加载时机问题:如果这段代码是在页面DOM完全加载前执行的,
document.getElementById('status-bar')会返回null,后续操作childspan的时候就会报错,导致进度条完全不工作。可以把代码放在DOMContentLoaded事件里,或者放在页面底部。进度更新逻辑缺失:现有代码只初始化了变量,没看到实际更新进度条宽度的逻辑(比如
childdiv.style.width = width + '%'),也没看到触发进度变化的触发条件(比如答题完成后的累加逻辑)。如果这部分逻辑有漏洞,比如步长step和teilprozent不匹配,或者累加时没有边界判断(比如超过100%还继续累加),也会表现出怪异的进度变化。
你可以先从这些点入手排查,要是能补充下具体的异常表现(比如进度条不动、跳变、数值错误等),或者补全剩余的代码,能更精准定位问题哦!
内容的提问来源于stack exchange,提问作者Srciptil

