使用javascript实现精确的计时范围

使用javascript实现精确的计时范围,javascript,timing,Javascript,Timing,我正在使用Soundmanager2库开发一个html5声音音量控制器小部件,我有一个函数,它应该设置一个变量,在15秒内插值到0-100之间,但是第一次需要15秒以上,之后每次都需要更少的时间。这种不一致性快把我逼疯了 我的js在这里: 代码: 我设置了15秒的持续时间: function fadeOutSound(soundObject) { var fadeLengthInSeconds = 15; 我在这里做数学题: if(soundObject.volume < max

我正在使用Soundmanager2库开发一个html5声音音量控制器小部件,我有一个函数,它应该设置一个变量,在15秒内插值到0-100之间,但是第一次需要15秒以上,之后每次都需要更少的时间。这种不一致性快把我逼疯了

我的js在这里:

代码: 我设置了15秒的持续时间:

function fadeOutSound(soundObject) {
    var fadeLengthInSeconds = 15;
我在这里做数学题:

if(soundObject.volume < maximumVolume) {
    var progressRatio = deltaTime / soundObject.fadeLength;
    var actualProgress = progressRatio * maximumVolume;
    soundObject.setVolume( soundObject.volume + actualProgress );
if(soundObject.volume
感谢您提供的任何帮助/提示!如果我可以添加任何信息/代码以使其更清晰,请让我知道


编辑:我最终使用了一个自动调整计时器,例如:

您可能想看看分区。 我怀疑有这样一个错误:

10/3=3


所有数字都转换为整数。

您可能需要查看除法。 我怀疑有这样一个错误:

10/3=3


所有数字都转换为整数。

根据定义,JavaScript中的所有数字都是64位浮点。但是,各种JavaScript引擎通常会尽可能将它们转换为更简单的数字格式(我非常确定至少V8会这样做)


虽然我自己还没有玩过,但它似乎是目前让数学在更大范围内运行的最佳技巧。不过,它只适用于“现代”浏览器。

根据定义,JavaScript中的所有数字都是64位浮点数。然而,各种JavaScript引擎通常尽可能将它们转换为更简单的数字格式(我很确定至少V8可以做到这一点。)


虽然我自己还没有玩过,但它似乎是目前让数学在更大范围内发挥作用的最好方法。它只适用于“现代”浏览器,但。

尝试将其转换为浮点数?或者尝试像
var fade\u length\u in_seconds=15.0
这样的方法,而不是仅仅15。好吧,没关系。这是一个很快的主意……好吧,这实际上让它变得更好了,但只有在Chrome中。现在它在Firefox中变得疯狂了。Whyyyyyyyyyyy。谢谢你这么做!我很惊讶改变的东西是一个好主意自身问题-setTimeout delay小于100ms将受到函数执行时间的影响。在不同浏览器中打开此选项,查看差异。尝试将其转换为浮点数?或尝试类似于
var fade\u length\u in_seconds=15.0
的操作,而不是仅15.ok,不会有任何影响。这是一个快速的想法…好的,因此实际上是b更详细,但仅限于Chrome。现在Firefox.whyyyyyyyy变得疯狂了。不过谢谢!我很惊讶更改的内容是一个已知的问题-setTimeout延迟小于100ms会受到函数执行时间的影响。在不同的浏览器中打开它,可以看到差异。这不是类型转换。这只是整数除法。然而,在JavaScript
10/3=3.33333
中,JavaScript数学在Chrome和Firefox中的运行是否有所不同?因为Benjamin Tan简单地将15改为15.0的建议实际上解决了Chrome中的不一致性问题,但在Firefox中几乎更加不一致。这不是类型转换。这只是整数除法。Howe无论如何,在JavaScript
10/3=3.33333
中,JavaScript数学在Chrome和Firefox中的运行是否有所不同?因为Benjamin Tan简单地将15改为15.0的建议实际上解决了Chrome中的不一致性问题,但现在在Firefox中几乎更不一致