我找到了一个自定义的html5音频播放器,并成功地重新设计了它,现在我想在播放器加载音频时添加一个“加载/缓冲”文本(否则用户可能会抓狂,因为他们点击播放后什么都没有发生)。
下面是要解释的代码:
function calculateTotalValue(length) {
var minutes = Math.floor(length / 60),
seconds_int = length - minutes * 60,
seconds_str = seconds_int.toString(),
seconds = seconds_str.substr(0, 2),
time = minutes + ':' + seconds
return time;
}
function calculateCurrentValue(currentTime) {
var current_hour = parseInt(currentTime / 3600) % 24,
current_minute = parseInt(currentTime / 60) % 60,
current_seconds_long = currentTime % 60,
current_seconds = current_seconds_long.toFixed(),
current_time = (current_minute < 10 ? "0" + current_minute : current_minute) + ":" + (current_seconds < 10 ? "0" + current_seconds : current_seconds);
return current_time;
}
function initProgressBar() {
var player = document.getElementById('player');
var length = player.duration
var current_time = player.currentTime;
// calculate total length of value
var totalLength = calculateTotalValue(length)
jQuery(".end-time").html(totalLength);
// calculate current value time
var currentTime = calculateCurrentValue(current_time);
jQuery(".start-time").html(currentTime);
var progressbar = document.getElementById('seekObj');
progressbar.value = (player.currentTime / player.duration);
progressbar.addEventListener("click", seek);
if (player.currentTime == player.duration) {
$('#play-btn').removeClass('pause');
}
function seek(evt) {
var percent = evt.offsetX / this.offsetWidth;
player.currentTime = percent * player.duration;
progressbar.value = percent / 100;
}
};
function initPlayers(num) {
// pass num in if there are multiple audio players e.g 'player' + i
for (var i = 0; i < num; i++) {
(function() {
// Variables
// ----------------------------------------------------------
// audio embed object
var playerContainer = document.getElementById('player-container'),
player = document.getElementById('player'),
isPlaying = false,
playBtn = document.getElementById('play-btn');
// Controls Listeners
// ----------------------------------------------------------
if (playBtn != null) {
playBtn.addEventListener('click', function() {
togglePlay()
});
}
// Controls & Sounds Methods
// ----------------------------------------------------------
function togglePlay() {
if (player.paused === false) {
player.pause();
isPlaying = false;
$('#play-btn').removeClass('pause');
} else {
player.play();
$('#play-btn').addClass('pause');
isPlaying = true;
}
}
}());
}
}
initPlayers(jQuery('#player-container').length);
CodePen上的播放器代码(源代码)
所以基本上我想把一些文本放在开始时间,而它只显示零
我是JS新手
这就是为什么我需要一些帮助或指出正确的方向
发布于 2018-08-12 23:57:46
您可以通过音频播放器的readyState事件来展示hide加载。已经有一个"SetInterval“正在被触发,所以我们可以添加这段代码来显示/隐藏”加载“。
1添加加载元素(你可以把它放在任何你想放的地方“
<h3 id="loading" style="display:none;">Loading</h3>
现在,让我们添加代码来检查"SetInterval“内部的"readystate”。
if(player.readyState>0&&player.readyState<4){
$("#loading").show();
}
else{
$("#loading").hide();
}
您可以阅读有关"readystate“here的更多信息
根据请求,我已经更改了代码以使用开始时间作为加载,为了让它工作,我们不需要在/As中添加任何东西,但需要在JS中做一些更改
首先,在"togglePlay“块的"else”块中的“else”函数中添加此条件。
$(".start-time").html("Loading...");
在此之后,内部的"initProgressBar()“函数将"jQuery(".start-time").html(currentTime);”替换为以下代码
if (player.readyState === 4) {
jQuery(".start-time").html(currentTime);
}
所以它将如何工作,当你点击播放按钮时,开始时间文本将显示为“正在加载”,但一旦文件被加载,播放器准备播放文本将被更改为“开始时间”,希望它能工作。我还更新了CodePen以更好地理解
您可以在CodePen中找到完整的代码
发布于 2018-08-10 04:54:31
当播放器的play promise完成时,你可以使用setInterval在不同的“加载”文本和clearInterval之间循环。
下面是一个基本的例子:
var dots = 1;
var loading = setInterval(function(){
dots = (dots % 3) + 1;
$(".start-time").text("Loading" + Array(dots + 1).join("."));
console.log($(".start-time").text());
}, 250);
player.play().then(function() {
clearInterval(loading);
}).catch((error) => {
$(".start-time").text("Error loading");
});
https://stackoverflow.com/questions/51775069
复制相似问题