Делаем аудио плеер с помощью 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 для того чтобы плееры не пели хором 🙂
Соответственно в разметке надо расставить id jquery_jplayer_1, jp_container_1; jquery_jplayer_2, jp_container_2 и т.д.
Разметка для каждого плеера одинаковая.
Огромное спасибо за ответ! У меня так и получилось, что они хором пели))
Большое спасибо, очень долго искал пример такого кода
Попробовал этот скрипт. Всё равно хором почему-то поют 🙁
Пример с двумя плеерами
Теперь работает, спасибо)) Хотя делал всё также вроде) Не знаю в чем было у меня дело
Если не трудно, подскажите пожалуйста, куда и что мне поставить в этом коде, чтобы остальные плееры останавливались. Перепробовал, ничего не помогает. Таких плееров 5 штук на сайте.
РОЛЬФ
Буду вам ооочень признателен
А вы не поможете с примером, для того чтобы не писать 10 разных скриптов для каждой песни, а один скрипт для всех. Чтобы песня передавалась через переменную.
Привет, перепробовал много плееров на html5, но ни один не заработал, так как нужно, а конкретно требуется следующее:
Плеер будет стоять на сайте интернет-радио. Т.е. воспроизводит аудио поток. Сейчас плеер при нажатии на паузу останавливается и если через некоторое время нажать «плей», то воспроизведение начинается с того места, на котором нажали паузу.
А как сделать так, чтобы после паузы, плеер не продолжал воспроизведение, а подключился к потоку и начал играть то, что вещает сервер в данный момент.
Здравствуй если можешь поделись информацией как ты сделал кнопку а то я в программировании не силен у меня тоже такая задача стоит сделать интернет радио там все просто нужно сделать кнопку которая при нажатии будет подхватывать поток и воспроизводить радио, а при повторном нажатии что бы была пауза.
А как сбросить трек в начало? Игра/пауза понятно, а как через яваскрипт трек в начало перемотать?
Здравствуйте!
Чтобы перемотать в начало можно использовать следующую конструкцию:
Добрый день, можно ли в этом плеере задать несколько песен, чтобы они играли одна за другой? Или только по одной возможно?
Добрый день!
Столкнулся с проблемой: на iphone/ipad не отображается уровень громкости (при повторной перезагрузке сразу есть, и потом пропадает, когда страница загрузилась)
Что это может быть? подскажите
Ставлю плеер на mp3-сайт как предварительную прослушку. Там на странице 50 песен. Как внедрить php-код в js чтобы отрабатывался цикл такого типа: song.php?id=%s ?