我尝试制作一个脚本,在每次选择更改时将数字增加到所选数字。例如,如果用户选择30,我希望数字以每秒30个值的速率增加,因此它在一秒内达到30。
我不知道出了什么问题,但是在执行此脚本时,它只会在第一页加载时递增,但不会更改值。
https://jsfiddle.net/User1010/b7znc3fL/
var valueElement = document.getElementById('value');
var option = document.getElementById('option');
var start = 0;
var end = parseFloat(option.innerHTML);
var duration = 1000; // In milliseconds (divide by 1000 to get seconds).
var framerate = 50; // In milliseconds (divide by 1000 to get seconds).
var toAdd = ( ( end - start ) * framerate ) / duration;
var interval = setInterval(function() {
var currentValue = parseFloat(valueElement.innerHTML);
if (currentValue >= end) {
clearInterval(interval);
return;
}
valueElement.innerHTML = (!isNaN(currentValue) == true ? (currentValue + toAdd).toFixed(2) : toAdd);
}, framerate);
答案 0 :(得分:1)
看起来您只需将更改事件处理程序绑定到select /选项。 将MDN's Event documentation添加到脚本以处理更改和更新值时,请参考https://www.debian.org/doc/debian-policy/#version。
简而言之,如果您想使用像jQuery这样的框架,可以大大简化流程和脚本。
答案 1 :(得分:1)
你可能正在过度思考这项任务。我还发现在控制台和 JSFiddle 中有错误和改变的事情。例如,没有名称选项的元素。
https://www.khanacademy.org/computing/computer-programming/html-css-js/html-js-dom-animation/p/animating-dom-with-setinterval https://www.khanacademy.org/computer-programming/spin-off-of-challenge-stopwatch/6144204027232256
counterEl
在ID'每日'上使用document.getElementById()
初始化span元素的变量selectEl
。 document.getElementById()
在id'值'上使用currentTime
初始化select元素的变量counterEl
。 float
的类型null变量,通过调用parseFloat()
上的countEl.textContent
将stopwatch
转换为setInterval
数据类型。selectElement.addEventListener("change", myFunction);
的类型null变量,当您使用resetStopwatch() {}
时将对其进行初始化。I also used the linking Stack Overflow question for help
每次更改值时,都会向select元素添加一个事件侦听器:countEl.textContent
创建全局函数currentTime
stopwatch = window.setInterval(countUp, 1000);
设为0。countUp
设置为0。// Turns the value into a float so it can be incremented and compared (textContent is a string)
currentTime = parseFloat(seconds.textContent);
// Add 1 second every time function is called
seconds.textContent = currentTime + 1;
if (seconds.textContent >= selectElement.value) {
window.clearInterval(stopwatch); // Stops the stopwatch if the seconds
reached the selected option
console.log("My time has been cleared");
}
创建全局setInterval
功能
这里的所有内容都在评论中解释。
stopwatch = window.setInterval(countUp, 1000/incrementRate.value);
在{{1}}中,您希望它在一秒钟内递增多个,因此您可以将调用更改为
{{1}}
使用我的 JS小提琴获取解决问题的指导: https://jsfiddle.net/404_Error/z0t4spob/