Dantes (обсуждение | вклад) Нет описания правки |
Dantes (обсуждение | вклад) Нет описания правки |
||
| (не показано 28 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
$(function () { | |||
var players = document.getElementsByClassName('audio-player'); | |||
for (var i = 0; i < players.length; i++) { | |||
(function (container) { | |||
var src = container.getAttribute('data-src'); | |||
if (!src) return; | |||
. | var audio = document.createElement('audio'); | ||
audio.src = src; | |||
. | var wrapper = document.createElement('div'); | ||
wrapper.className = 'custom-audio-wrapper'; | |||
. | var playBtn = document.createElement('button'); | ||
playBtn.className = 'custom-audio-play'; | |||
playBtn.innerHTML = '▶'; | |||
. | var progress = document.createElement('input'); | ||
progress.setAttribute('type', 'range'); | |||
progress.className = 'custom-audio-progress'; | |||
progress.setAttribute('min', 0); | |||
progress.value = 0; | |||
} | progress.step = 0.01; | ||
var time = document.createElement('span'); | |||
time.className = 'custom-audio-time'; | |||
time.innerHTML = '0:00'; | |||
// Добавляем кнопку громкости | |||
var volumeBtn = document.createElement('button'); | |||
volumeBtn.className = 'custom-audio-volume-btn'; | |||
volumeBtn.innerHTML = '🔊'; | |||
// Ползунок громкости | |||
var volumeControl = document.createElement('input'); | |||
volumeControl.setAttribute('type', 'range'); | |||
volumeControl.setAttribute('min', 0); | |||
volumeControl.setAttribute('max', 1); | |||
volumeControl.setAttribute('step', 0.01); | |||
volumeControl.setAttribute('value', 1); | |||
volumeControl.className = 'custom-audio-volume'; | |||
wrapper.appendChild(playBtn); | |||
wrapper.appendChild(progress); | |||
wrapper.appendChild(time); | |||
wrapper.appendChild(volumeBtn); | |||
wrapper.appendChild(volumeControl); | |||
container.appendChild(wrapper); | |||
playBtn.onclick = function () { | |||
if (audio.paused) { | |||
audio.play(); | |||
playBtn.innerHTML = '⏸'; | |||
} else { | |||
audio.pause(); | |||
playBtn.innerHTML = '▶'; | |||
} | |||
}; | |||
// Исправим ситуацию, если duration ещё не прогрузилась | |||
audio.addEventListener('loadedmetadata', function () { | |||
progress.max = audio.duration; | |||
}); | |||
audio.addEventListener('timeupdate', function () { | |||
progress.value = audio.currentTime; | |||
if (!isNaN(audio.duration)) { | |||
progress.max = audio.duration; | |||
} | |||
time.innerHTML = formatTime(audio.currentTime); | |||
}); | |||
progress.addEventListener('input', function () { | |||
audio.currentTime = parseFloat(progress.value); | |||
}); | |||
volumeControl.addEventListener('input', function () { | |||
audio.volume = volumeControl.value; | |||
}); | |||
function formatTime(seconds) { | |||
var mins = Math.floor(seconds / 60); | |||
var secs = Math.floor(seconds % 60); | |||
if (secs < 10) secs = '0' + secs; | |||
return mins + ':' + secs; | |||
} | |||
})(players[i]); | |||
} | |||
}); | |||
Версия от 20:57, 16 апреля 2025
$(function () {
var players = document.getElementsByClassName('audio-player');
for (var i = 0; i < players.length; i++) {
(function (container) {
var src = container.getAttribute('data-src');
if (!src) return;
var audio = document.createElement('audio');
audio.src = src;
var wrapper = document.createElement('div');
wrapper.className = 'custom-audio-wrapper';
var playBtn = document.createElement('button');
playBtn.className = 'custom-audio-play';
playBtn.innerHTML = '▶';
var progress = document.createElement('input');
progress.setAttribute('type', 'range');
progress.className = 'custom-audio-progress';
progress.setAttribute('min', 0);
progress.value = 0;
progress.step = 0.01;
var time = document.createElement('span');
time.className = 'custom-audio-time';
time.innerHTML = '0:00';
// Добавляем кнопку громкости
var volumeBtn = document.createElement('button');
volumeBtn.className = 'custom-audio-volume-btn';
volumeBtn.innerHTML = '🔊';
// Ползунок громкости
var volumeControl = document.createElement('input');
volumeControl.setAttribute('type', 'range');
volumeControl.setAttribute('min', 0);
volumeControl.setAttribute('max', 1);
volumeControl.setAttribute('step', 0.01);
volumeControl.setAttribute('value', 1);
volumeControl.className = 'custom-audio-volume';
wrapper.appendChild(playBtn);
wrapper.appendChild(progress);
wrapper.appendChild(time);
wrapper.appendChild(volumeBtn);
wrapper.appendChild(volumeControl);
container.appendChild(wrapper);
playBtn.onclick = function () {
if (audio.paused) {
audio.play();
playBtn.innerHTML = '⏸';
} else {
audio.pause();
playBtn.innerHTML = '▶';
}
};
// Исправим ситуацию, если duration ещё не прогрузилась
audio.addEventListener('loadedmetadata', function () {
progress.max = audio.duration;
});
audio.addEventListener('timeupdate', function () {
progress.value = audio.currentTime;
if (!isNaN(audio.duration)) {
progress.max = audio.duration;
}
time.innerHTML = formatTime(audio.currentTime);
});
progress.addEventListener('input', function () {
audio.currentTime = parseFloat(progress.value);
});
volumeControl.addEventListener('input', function () {
audio.volume = volumeControl.value;
});
function formatTime(seconds) {
var mins = Math.floor(seconds / 60);
var secs = Math.floor(seconds % 60);
if (secs < 10) secs = '0' + secs;
return mins + ':' + secs;
}
})(players[i]);
}
});