javascript - 如何显示音频持续时间并每秒减去一秒?
问题描述
我做了这个函数,我希望每秒的音频持续时间减一,但它返回 NaN,然后我尝试删除它," : "
所以它是完整的数字,但setInterval
只执行一次,例如,如果音频持续时间为 0524,点击后.button
它只返回 0523。
<button class="button"></button>
<p class="demo"></p>
var playng= new Audio();
playng.src = audio.mp3;
$('.button').click(function(){
playng.play()
songDur()
})
function songDur(){
var audiod = playng.duration;
var minutes = "0" + Math.floor(audiod / 60);
var seconds = Math.floor(audiod - minutes * 60);
var songTime = minutes + " : " + seconds;
console.log(songTime);
setInterval(function(){
$('.demo').text(songTime - 1)},1000);
}
解决方案
NaN
代表“Not a Number”,中间有冒号的两个数字确实不是数字。
如果您删除冒号,它似乎只运行一次的原因是因为您从不更新songTime
. 您仅将文本设置为songTime -1
,但songTime
从未更新,因此songTime -1
也将始终输出相同的数字。
还值得一提的是,setInterval
它不是很准确,并且会随着时间的推移而变化。
获得倒数计时器的最佳方法是准确倒数歌曲中剩余的时间,是currentTime
从duration
. 这将为您提供剩余的秒数,以便您可以将其转换为分钟和秒。(请务必在内部进行计算,setInterval
以便为每个间隔重新计算。)
var playng = new Audio();
playng.src = 'audio.mp3';
$('.button').click(function() {
playng.play()
songDur()
});
function songDur() {
setInterval(function() {
var timeRemaining = playng.duration - playng.currentTime;
var minutes = Math.floor(timeRemaining / 60);
var seconds = Math.floor(timeRemaining % 60);
var secondsWithLeadingZero = seconds < 10 ? '0' + seconds : seconds;
$('.demo').text(minutes + ':' + secondsWithLeadingZero);
}, 500);
}
<button class="button">Play</button>
<p class="demo"></p>
推荐阅读
- sql - WHEN 与 INSERT 语句匹配
- python - Heroku build 卡在 Building Source for Simple Python Flask App
- javascript - 每次打开我的谷歌表格时,如何为特定单元格设置时间戳?
- java - 'Else' 是我的 Java 代码中的一个意外标记,我得到的错误是第 18 行的非法类型。我的代码有什么问题?
- node.js - 加入链式承诺?
- bash - 我可以在没有多线程的情况下在 bash 中隧道 TLS 流量吗?
- jenkins - 如何使用 Jenkins 参数将值替换为属性文件
- java - 如何使用 forEach 或 forEachValue 方法
- class - 如何在 Protege 中连接两个实例?
- swift - 如何在没有控制器的情况下推送视图控制器