<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>video</title>
</head>
<body>
<video id="videoDOM" style="width: 40%; height:40%" src="http://qiniu.jiusongjiankang.com/doctor/5b87c7255074b918917ebfc9.mp4" controls oncanplay="getTime(this)"></video>
<script>
function getTime(_this) {
console.log(parseInt(_this.duration)); // 101
console.log(formatTime(parseInt(_this.duration))); // 01:41
}
document.getElementById('videoDOM').ontimeupdate = function () {
// 视频已经播放时长
console.log(parseInt(this.currentTime));
console.log(parseInt(this.duration));
}
// 设置视频播放时长
document.getElementById('videoDOM').currentTime = 5;
console.log("video time", document.getElementById('videoDOM').duration);
// video time NaN
setTimeout(function() {
console.log("video time", document.getElementById('videoDOM').duration);
// video time NaN
}, 200);
// 格式化时间函数
function formatTime(s) {
var t;
if(s > -1) {
var hour = Math.floor(s / 3600);
var min = Math.floor(s / 60) % 60;
var sec = s % 60;
if(hour < 0 || hour == 0) {
t = '';
} else if(0 < hour < 10) {
t = '0' + hour + ":";
} else {
t = hour + ":";
}
if(min < 10) {
t += "0";
}
t += min + ":";
if(sec < 10) {
t += "0";
}
t += sec;
}
return t;
}
</script>
</body>
</html>
在获取 video 总时长的时候,在 js 中获取 video 元素然后在获取 duration 是获取不到的,即使加一个延迟也还是获取不到。
解决方法:
在 video 标签身上加 oncanplay 方法,在这个方法中就可以获取到视频的时长了。