Я использую JWplayer 7 (режим рендеринга HTML5) на своем сайте. Я создал проигрыватель с настраиваемым списком воспроизведения, но не могу выделить текущее воспроизводимое видео при нажатии на него.
Есть ли решение добавить собственный класс, например .active
, при нажатии на элемент списка.
Это мой код для настройки JWplayer.
var playerInstance = jwplayer("videoCont");
playerInstance.setup({
image: "{PLAYLIST_IMAGE}",
autostart: false,
aspectratio: "16:9",
playlist : "{NV_BASE_SITEURL}{MODULE_NAME}/player/{RAND_SS}{PLAYLIST_ID}-{PLIST_CHECKSS}-{RAND_SS}{FAKE_ID}/",
controls: true,
displaydescription: true,
displaytitle: true,
flashplayer: "{NV_BASE_SITEURL}themes/default/modules/{MODULE_NAME}/jwplayer/jwplayer.flash.swf",
primary: "html5",
repeat: false,
skin: {"name": "stormtrooper"},
stagevideo: false,
stretching: "uniform",
visualplaylist: true,
width: "100%"
});
И следующий код для создания пользовательского проигрывателя
var list = document.getElementById("show-list");
var html = list.innerHTML;
html +="<ul class='list-group'>"
playerInstance.on('ready',function(){
var playlist = playerInstance.getPlaylist();
for (var index=0;index<playlist.length;index++){
var playindex = index +1;
html += "<li class='list-group-item'><span>"+playlist[index].title+"</span><span class='pull-right'><label onclick='javascript:playThis("+index+")' title='Phát "+playlist[index].title+"' class='btn btn-default btn-xs'><i class='fa fa-play'></i></label><label class='btn btn-default btn-xs' href='"+playlist[index].link+"' title='Xem ở cửa sổ mới' target='_blank'><i class='fa fa-external-link-square'></i></label></span></li>"
list.innerHTML = html;
}
html +="</ul>"
});
function playThis(index) {
playerInstance.playlistItem(index);
}
РЕШЕНИЕ: основано на идее @zer00ne
Добавьте следующий код:
playerInstance.on('playlistItem', function() {
var playlist = playerInstance.getPlaylist();
var index = playerInstance.getPlaylistIndex();
var current_li = document.getElementById("play-items-"+index);
for(var i = 0; i < playlist.length; i++) {
$('li[id^=play-items-]').removeClass( "active" )
}
current_li.classList.add('active');
});
до
function playThis(index) {
playerInstance.playlistItem(index);
}
И отредактируйте html, сгенерированный следующим образом:
html += "<li id='play-items-"+index+"' class='list-group-item'><span>"+playlist[index].title+"</span><span class='pull-right'><label onclick='javascript:playThis("+index+")' title='"+lang_play+" "+playlist[index].title+"' class='btn btn-primary btn-xs mgr_10'><i class='fa fa-play'></i></label><a href='"+playlist[index].link+"' title='"+lang_new_window+"' target='_blank'><label class='btn btn-default btn-xs'><i class='fa fa-external-link-square'></i></label></a></span></li>"
С добавлением id='play-items-"+index+"'
для определения уникального класса для каждого элемента списка.
current_li.classList.add('active');
наcurrent_li.className = 'active';
- person zer00ne   schedule 28.10.2015current_li.className = 'active';
класс oringin (в данном случаеlist-group-item
) полностью заменяется наactive
вместо добавления нового класса. Я думаю, чтоclassList.add
- безопасный метод. - person Aluminum Gates   schedule 28.10.2015There was an error calling back an event handler for "playlistItem". Error: li[i] is undefined
В Chrome возвращаетThere was an error calling back an event handler for "playlistItem". Error: Cannot read property 'classList' of undefined
- person Aluminum Gates   schedule 29.10.2015