Делаем аудио плеер с помощью jQuery и jPlayer
Раньше, в начале 2000х, возможности воспроизведения аудио или видео контента онлаин, в браузере были сильно ограничены. Сегодня, благодаря новым возможностям HTML5 и тегу <audio> мы можем сами создавать аудио и видео плееры без каких-либо ограничений. Чем и займемся в этой статье 🙂
Что нам понадобится
Перед тем как начать, необходимо подготовить несколько вещей, которые нам понадобятся для создания аудио плеера: jQuery, плагин jPlayer и шрифт FontAwesome.
jPlayer — это jQuery плгин, который позволяет проигрывать аудио и видео контент прямо на странице в браузере. Для стилизации нашего плеера будем использовать иконки FontAwesome.
Как только все необходимые инструменты будут готовы — подключим их к нашей странице:
<link rel="stylesheet" href="css/normalize.css"> <link type="text/css" href="css/style.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.jplayer.min.js"></script>
Как видите помимо библиотек jQuery и jPlayer, мы указали еще два CSS файла. Первый — normalize.css будет сбрасывать дефолтные стили браузеров для более лучшего отображения плеера, второй — style.css содержит стили для плеера.
HTML разметка
Пришло время заняться HTML разметкой для нашего веб плеера. Важным моментом в разметке является элемент с id=jquery_jplayer_1. Позже этот id мы передадим плагину jPlayer с помощью jQuery.
Кроме того, все CSS классы в разметке, включая jp-play, jp-pause, jp-mute и jp-unmute — все эти классы — стандартные классы, используемые в jPlayer.
<div id="jquery_jplayer_1" class="jp-jplayer"></div>
<div id="jp_container_1" class="jp-audio">
<div class="jp-type-single">
<div class="jp-title">
<ul>
<li>TEDxPhoenix - Kelli Anderson - Disruptive Wonder for a Change</li>
</ul>
</div>
<div class="jp-gui jp-interface">
<ul class="jp-controls">
<li><a href="javascript:;" class="jp-play" tabindex="1"></a></li>
<li><a href="javascript:;" class="jp-pause" tabindex="1"></a></li>
<li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute"></a></li>
<li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute"></a></li>
</ul>
<div class="jp-progress">
<div class="jp-seek-bar">
<div class="jp-play-bar"></div>
</div>
</div>
<div class="jp-time-holder">
<div class="jp-current-time"></div>
</div>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>
<div class="jp-no-solution">
<span>Update Required</span>
To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>.
</div>
</div>
</div>
</div>
Если взглянуть внимательнее, то вы увидите непонятные символы 🙂 : ,,  и . Эти символы — специальные HTML символы, которые будут использованы для рендера иконок FontAwesome.
Активируем аудио плеер
Теперь, когда разметка готова, осталось только активировать плеер следующим скриптом. В этом скрипте мы укажем файлы для воспроизведения.
$(document).ready(function(){
$("#jquery_jplayer_1").jPlayer({
ready: function () {
$(this).jPlayer("setMedia", {
mp3: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.mp3",
oga: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.ogg"
});
},
swfPath: "/js",
supplied: "mp3,oga"
});
});
После добавления скрипта уже можно воспроизводить музыку и если посмотреть код нашей разметки с помощью инструментов разработчика, можно найти HTML5 тег <audio>, который автоматически генерируется плагином.

Стилизация аудио плеера
Теперь пришло время написать стили для плеера. Начнем с объявления нового шрифта и удаления подчеркивания у ссылок:
@font-face {
font-family: "FontAwesome";
src: url("fonts/fontawesome-webfont.eot");
src: url("fonts/fontawesome-webfont.eot?#iefix") format("eot"),
url("fonts/fontawesome-webfont.woff") format("woff"),
url("fonts/fontawesome-webfont.ttf") format("truetype"),
url("fonts/fontawesome-webfont.svg#FontAwesome") format("svg");
font-weight: 400;
font-style: normal;
}
a {
text-decoration: none;
}
.jp-jplayer,.jp-audio {
width: 420px;
margin: 50px auto;
}
Название песни
Мы не будем сильно изменять эту часть стандартных стилей, т.к. они отвечают лишь за отображения текущей записи. Мы только сделаем текст меньше и сделаем его серым.
.jp-title {
font-size: 12px;
text-align: center;
color: #999;
}
.jp-title ul {
padding: 0;
margin: 0;
list-style: none;
}
Интерфейс плеера
Интерфейс плеера содержится в div'е с классом jp-gui. Как будет выглядеть плеер, вы можете увидеть на скриншоте выше. В качестве фона будет градиент с цветами: #f34927, и #dd3311. Также важно, чтобы свойство position было установлено в relative.
.jp-gui {
position: relative;
background: #f34927;
background: -moz-linear-gradient(top, #f34927 0%, #dd3311 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f34927), color-stop(100%,#dd3311));
background: -webkit-linear-gradient(top, #f34927 0%,#dd3311 100%);
background: -o-linear-gradient(top, #f34927 0%,#dd3311 100%);
background: -ms-linear-gradient(top, #f34927 0%,#dd3311 100%);
background: linear-gradient(to bottom, #f34927 0%,#dd3311 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f34927', endColorstr='#dd3311',GradientType=0 );
-webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, .1);
box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, .1);
border-radius: 3px;
overflow: hidden;
margin-top: 10px;
}
Контроллеры
Интерфейс плеера содержит контроллеры для управления воспроизведением, например, кнопки запуска, паузы и громкости. Все, что мы сделаем — это установим свойство font-family равным FontAwesome, сделаем цвет текста белым и добавим теней.
.jp-controls {
padding: 0;
margin: 0;
list-style: none;
font-family: "FontAwesome";
text-shadow: 1px 1px 0 rgba(0,0,0,0.3);
}
.jp-controls li {
display: inline;
}
.jp-controls a {
color: #fff;
}
Кнопки воспроизведения и паузы
Кнопки воспроизведения и паузы мы позиционируем абсолютно, именно поэтому класс .jp-gui мы ранее спозиционировали относительно. Поэтому позиция кнопок будет вычисляться относительно родительского элемента, а не окна браузера.
.jp-play,.jp-pause {
width: 60px;
height: 40px;
display: inline-block;
text-align: center;
line-height: 43px;
border-right: 1px solid #d22f0f;
}
.jp-controls .jp-play:hover,.jp-controls .jp-pause:hover {
background-color: #de3918;
}
.jp-mute,.jp-unmute {
position: absolute;
right: 55px;
top: 0;
width: 20px;
height: 40px;
display: inline-block;
line-height: 46px;
}
.jp-mute {
text-align: left;
}
.jp-time-holder {
color: #FFF;
font-size: 12px;
line-height: 14px;
position: absolute;
right: 90px;
top: 14px;
text-shadow: 1px 1px 0 rgba(0,0,0,0.3);
}
Процесс воспроизведения и ползунок громкости
Оба элемента будут выглядеть как прогрессбары, только тот, который отображает процесс воспроизведения музыки будет больше, чем регулятор громкости.
.jp-progress {
background-color: #992E18;
border-radius: 20px 20px 20px 20px;
overflow: hidden;
position: absolute;
right: 133px;
top: 15px;
width: 210px;
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.2) inset;
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.2) inset;
}
.jp-play-bar {
height: 12px;
background-color: #fff;
border-radius: 20px 20px 20px 20px;
}
.jp-volume-bar {
position: absolute;
right: 10px;
top: 17px;
width: 45px;
height: 8px;
border-radius: 20px 20px 20px 20px;
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1) inset;
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1) inset;
background-color: #992E18;
overflow: hidden;
}
.jp-volume-bar-value {
background-color: #fff;
height: 8px;
border-radius: 20px 20px 20px 20px;
}
Готово! Результат вы можете посмотреть на демо странице и в исходниках.








Доброго времени суток!
Скажите пожалуйста, возможно ли добавить на одну страницу два и более таких плеера, но с разными mp3?
Здравствуйте!
Для нескольких плееров JavaScript код будет немного другой: надо будет использовать событие $.jPlayer.event.play для того чтобы плееры не пели хором 🙂
$(document).ready(function(){ $("#jquery_jplayer_1").jPlayer({ ready: function () { $(this).jPlayer("setMedia", { mp3: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.mp3", oga: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.ogg" }); }, swfPath: "/js", supplied: "mp3,oga", play: function() { // Останавливаем остальные $(this).jPlayer("pauseOthers"); }, wmode: "window", smoothPlayBar: true, keyEnabled: true }); $("#jquery_jplayer_2").jPlayer({ ready: function () { $(this).jPlayer("setMedia", { mp3: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.mp3", oga: "audio/TEDxPhoenix-KelliAnderson-DisruptiveWonderforaChange.ogg" }); }, swfPath: "/js", supplied: "mp3,oga", play: function() { // Останавливаем остальные $(this).jPlayer("pauseOthers"); }, cssSelectorAncestor: "#jp_container_2", wmode: "window", smoothPlayBar: true, keyEnabled: true }); });Соответственно в разметке надо расставить id jquery_jplayer_1, jp_container_1; jquery_jplayer_2, jp_container_2 и т.д.
Разметка для каждого плеера одинаковая.
Огромное спасибо за ответ! У меня так и получилось, что они хором пели))
Большое спасибо, очень долго искал пример такого кода
Попробовал этот скрипт. Всё равно хором почему-то поют 🙁
Пример с двумя плеерами
Теперь работает, спасибо)) Хотя делал всё также вроде) Не знаю в чем было у меня дело
Если не трудно, подскажите пожалуйста, куда и что мне поставить в этом коде, чтобы остальные плееры останавливались. Перепробовал, ничего не помогает. Таких плееров 5 штук на сайте.
РОЛЬФ
document.getElementById("mybtn2").onclick = function() { var myaudio2 = document.getElementById("myaudio2"); if (myaudio2.paused == true) { document.getElementById("myaudio2").volume = "0.5"; document.getElementById("myaudio2").play(); this.style.backgroundImage = 'url(images/Null_but2.gif)'; this.style.color = "White"; } else if (myaudio2.paused == false) { document.getElementById("myaudio2").pause(); this.style.backgroundImage = 'url(images/Null_but.gif)'; this.style.color = "White"; } }Буду вам ооочень признателен
А вы не поможете с примером, для того чтобы не писать 10 разных скриптов для каждой песни, а один скрипт для всех. Чтобы песня передавалась через переменную.
Привет, перепробовал много плееров на html5, но ни один не заработал, так как нужно, а конкретно требуется следующее:
Плеер будет стоять на сайте интернет-радио. Т.е. воспроизводит аудио поток. Сейчас плеер при нажатии на паузу останавливается и если через некоторое время нажать «плей», то воспроизведение начинается с того места, на котором нажали паузу.
А как сделать так, чтобы после паузы, плеер не продолжал воспроизведение, а подключился к потоку и начал играть то, что вещает сервер в данный момент.
Здравствуй если можешь поделись информацией как ты сделал кнопку а то я в программировании не силен у меня тоже такая задача стоит сделать интернет радио там все просто нужно сделать кнопку которая при нажатии будет подхватывать поток и воспроизводить радио, а при повторном нажатии что бы была пауза.
А как сбросить трек в начало? Игра/пауза понятно, а как через яваскрипт трек в начало перемотать?
Здравствуйте!
Чтобы перемотать в начало можно использовать следующую конструкцию:
$("#jp-replay").click(function(){ // второй аргумент - прогресс в процентах $("#jquery_jplayer_1").jPlayer("playHead", 0); });Добрый день, можно ли в этом плеере задать несколько песен, чтобы они играли одна за другой? Или только по одной возможно?
Добрый день!
Столкнулся с проблемой: на iphone/ipad не отображается уровень громкости (при повторной перезагрузке сразу есть, и потом пропадает, когда страница загрузилась)
Что это может быть? подскажите
Ставлю плеер на mp3-сайт как предварительную прослушку. Там на странице 50 песен. Как внедрить php-код в js чтобы отрабатывался цикл такого типа: song.php?id=%s ?