mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-28 18:41:20 -08:00
调整播放列表接口
This commit is contained in:
1 parent
941ab07c66
commit
6056e7a0c6
9 files changed
+223
-235
No files matched your search
@@ -13,8 +13,3 @@ var art = new Artplayer({
|
|||||||
fontSize: 25,
|
fontSize: 25,
|
||||||
})],
|
})],
|
||||||
});
|
});
|
||||||
|
|
||||||
console.info('Danmuku loading...');
|
|
||||||
art.on('artplayerPluginDanmuku:loaded', () => {
|
|
||||||
console.info('Danmuku loaded');
|
|
||||||
});
|
|
||||||
@@ -36,16 +36,16 @@ var art = new Artplayer({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
plugins: [artplayerPluginPlaylist],
|
plugins: [
|
||||||
|
artplayerPluginPlaylist([
|
||||||
|
{
|
||||||
|
title: '你的名字',
|
||||||
|
url: url + '/video/you-name.mp4',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'One more time one more chance',
|
||||||
|
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
art.plugins.artplayerPluginPlaylist.load([
|
|
||||||
{
|
|
||||||
title: '你的名字',
|
|
||||||
url: url + '/video/you-name.mp4',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'One more time one more chance',
|
|
||||||
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
@@ -4,109 +4,108 @@
|
|||||||
(global = global || self, global.artplayerPluginPlaylist = factory());
|
(global = global || self, global.artplayerPluginPlaylist = factory());
|
||||||
}(this, function () { 'use strict';
|
}(this, function () { 'use strict';
|
||||||
|
|
||||||
function artplayerPluginPlaylist(art) {
|
function artplayerPluginPlaylist(list) {
|
||||||
var _art$constructor$util = art.constructor.utils,
|
return function (art) {
|
||||||
append = _art$constructor$util.append,
|
var _art$constructor$util = art.constructor.utils,
|
||||||
errorHandle = _art$constructor$util.errorHandle,
|
append = _art$constructor$util.append,
|
||||||
sleep = _art$constructor$util.sleep,
|
errorHandle = _art$constructor$util.errorHandle,
|
||||||
inverseClass = _art$constructor$util.inverseClass;
|
sleep = _art$constructor$util.sleep,
|
||||||
var player = art.player,
|
inverseClass = _art$constructor$util.inverseClass;
|
||||||
proxy = art.events.proxy,
|
var player = art.player,
|
||||||
_art$template = art.template,
|
proxy = art.events.proxy,
|
||||||
$player = _art$template.$player,
|
_art$template = art.template,
|
||||||
$video = _art$template.$video;
|
$player = _art$template.$player,
|
||||||
var $playlist = append($player, "\n <div class=\"artplay-playlist\">\n <div class=\"artplay-playlist-inner\"></div>\n </div>\n ");
|
$video = _art$template.$video;
|
||||||
var playlist = [];
|
var $playlist = append($player, "\n <div class=\"artplay-playlist\">\n <div class=\"artplay-playlist-inner\"></div>\n </div>\n ");
|
||||||
var $playlistInner = $playlist.querySelector('.artplay-playlist-inner');
|
errorHandle(Array.isArray(list), 'Playlist is not an array type');
|
||||||
|
errorHandle(list.length > 0, 'Playlist cannot be empty');
|
||||||
function switchUrl(index) {
|
var playlist = list.map(function (item) {
|
||||||
var itemOption = playlist[index];
|
errorHandle(item.url, 'Playlist items require url attribute');
|
||||||
return player.switchUrl(itemOption.url, itemOption.title).then(function () {
|
errorHandle(item.title, 'Playlist items require title attribute');
|
||||||
art.emit('artplayerPluginPlaylist:change', itemOption);
|
return item;
|
||||||
});
|
});
|
||||||
}
|
var $playlistInner = $playlist.querySelector('.artplay-playlist-inner');
|
||||||
|
$playlistInner.innerHTML = playlist.map(function (item, index) {
|
||||||
|
return "<div class=\"artplay-playlist-item\" data-option-index=\"".concat(index, "\">").concat(item.title, "</div>");
|
||||||
|
}).join('');
|
||||||
|
|
||||||
function prevVideo() {
|
function switchUrl(index) {
|
||||||
var index = playlist.findIndex(function (item) {
|
var itemOption = playlist[index];
|
||||||
return item.url === $video.src;
|
return player.switchUrl(itemOption.url, itemOption.title).then(function () {
|
||||||
});
|
art.emit('artplayerPluginPlaylist:change', itemOption);
|
||||||
errorHandle(index !== -1, "Can't find Playlist item");
|
|
||||||
|
|
||||||
if (playlist.length === 1) {
|
|
||||||
return switchUrl(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
var prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;
|
|
||||||
return switchUrl(prevIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
function nextVideo() {
|
|
||||||
var index = playlist.findIndex(function (item) {
|
|
||||||
return item.url === $video.src;
|
|
||||||
});
|
|
||||||
errorHandle(index !== -1, "Can't find Playlist item");
|
|
||||||
|
|
||||||
if (playlist.length === 1) {
|
|
||||||
return switchUrl(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
var nextIndex = index + 1 === playlist.length ? 0 : index + 1;
|
|
||||||
return switchUrl(nextIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy($playlistInner, 'click', function (e) {
|
|
||||||
var optionIndex = e.target.dataset.optionIndex;
|
|
||||||
|
|
||||||
if (optionIndex && Number(optionIndex) <= playlist.length - 1) {
|
|
||||||
switchUrl(optionIndex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
proxy($playlist, 'click', function (e) {
|
|
||||||
if (e.target === $playlist) {
|
|
||||||
$playlist.style.display = 'none';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
art.on('video:ended', function () {
|
|
||||||
nextVideo().then(function () {
|
|
||||||
sleep(1000).then(player.play);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
art.on('afterAttachUrl', function () {
|
|
||||||
var index = playlist.findIndex(function (item) {
|
|
||||||
return item.url === $video.src;
|
|
||||||
});
|
|
||||||
var $item = Array.from($playlistInner.children)[index];
|
|
||||||
|
|
||||||
if (index !== -1 && $item) {
|
|
||||||
inverseClass($item, 'active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
name: 'artplayerPluginPlaylist',
|
|
||||||
load: function load(list) {
|
|
||||||
errorHandle(Array.isArray(list), 'Playlist is not an array type');
|
|
||||||
errorHandle(list.length > 0, 'Playlist cannot be empty');
|
|
||||||
playlist = list.map(function (item) {
|
|
||||||
errorHandle(item.url, 'Playlist items require url attribute');
|
|
||||||
errorHandle(item.title, 'Playlist items require title attribute');
|
|
||||||
return item;
|
|
||||||
});
|
});
|
||||||
$playlistInner.innerHTML = playlist.map(function (item, index) {
|
|
||||||
return "<div class=\"artplay-playlist-item\" data-option-index=\"".concat(index, "\">").concat(item.title, "</div>");
|
|
||||||
}).join('');
|
|
||||||
},
|
|
||||||
show: function show() {
|
|
||||||
$playlist.style.display = 'flex';
|
|
||||||
},
|
|
||||||
hide: function hide() {
|
|
||||||
$playlist.style.display = 'none';
|
|
||||||
},
|
|
||||||
next: function next() {
|
|
||||||
nextVideo();
|
|
||||||
},
|
|
||||||
prev: function prev() {
|
|
||||||
prevVideo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function prevVideo() {
|
||||||
|
var index = playlist.findIndex(function (item) {
|
||||||
|
return item.url === $video.src;
|
||||||
|
});
|
||||||
|
errorHandle(index !== -1, "Can't find Playlist item");
|
||||||
|
|
||||||
|
if (playlist.length === 1) {
|
||||||
|
return switchUrl(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
var prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;
|
||||||
|
return switchUrl(prevIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextVideo() {
|
||||||
|
var index = playlist.findIndex(function (item) {
|
||||||
|
return item.url === $video.src;
|
||||||
|
});
|
||||||
|
errorHandle(index !== -1, "Can't find Playlist item");
|
||||||
|
|
||||||
|
if (playlist.length === 1) {
|
||||||
|
return switchUrl(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
var nextIndex = index + 1 === playlist.length ? 0 : index + 1;
|
||||||
|
return switchUrl(nextIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy($playlistInner, 'click', function (e) {
|
||||||
|
var optionIndex = e.target.dataset.optionIndex;
|
||||||
|
|
||||||
|
if (optionIndex && Number(optionIndex) <= playlist.length - 1) {
|
||||||
|
switchUrl(optionIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
proxy($playlist, 'click', function (e) {
|
||||||
|
if (e.target === $playlist) {
|
||||||
|
$playlist.style.display = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
art.on('video:ended', function () {
|
||||||
|
nextVideo().then(function () {
|
||||||
|
sleep(1000).then(player.play);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
art.on('afterAttachUrl', function () {
|
||||||
|
var index = playlist.findIndex(function (item) {
|
||||||
|
return item.url === $video.src;
|
||||||
|
});
|
||||||
|
var $item = Array.from($playlistInner.children)[index];
|
||||||
|
|
||||||
|
if (index !== -1 && $item) {
|
||||||
|
inverseClass($item, 'active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
name: 'artplayerPluginPlaylist',
|
||||||
|
show: function show() {
|
||||||
|
$playlist.style.display = 'flex';
|
||||||
|
},
|
||||||
|
hide: function hide() {
|
||||||
|
$playlist.style.display = 'none';
|
||||||
|
},
|
||||||
|
next: function next() {
|
||||||
|
nextVideo();
|
||||||
|
},
|
||||||
|
prev: function prev() {
|
||||||
|
prevVideo();
|
||||||
|
}
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"artplayer-plugin-playlist.js","sources":["../../packages/artplayer-plugin-playlist/src/index.js"],"sourcesContent":["import './index.scss';\n\nfunction artplayerPluginPlaylist(art) {\n const {\n utils: { append, errorHandle, sleep, inverseClass },\n } = art.constructor;\n const {\n player,\n events: { proxy },\n template: { $player, $video },\n } = art;\n\n const $playlist = append(\n $player,\n `\n <div class=\"artplay-playlist\">\n <div class=\"artplay-playlist-inner\"></div>\n </div>\n `,\n );\n\n let playlist = [];\n const $playlistInner = $playlist.querySelector('.artplay-playlist-inner');\n\n function switchUrl(index) {\n const itemOption = playlist[index];\n return player.switchUrl(itemOption.url, itemOption.title).then(() => {\n art.emit('artplayerPluginPlaylist:change', itemOption);\n });\n }\n\n function prevVideo() {\n const index = playlist.findIndex(item => item.url === $video.src);\n errorHandle(index !== -1, \"Can't find Playlist item\");\n if (playlist.length === 1) {\n return switchUrl(0);\n }\n const prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;\n return switchUrl(prevIndex);\n }\n\n function nextVideo() {\n const index = playlist.findIndex(item => item.url === $video.src);\n errorHandle(index !== -1, \"Can't find Playlist item\");\n if (playlist.length === 1) {\n return switchUrl(0);\n }\n const nextIndex = index + 1 === playlist.length ? 0 : index + 1;\n return switchUrl(nextIndex);\n }\n\n proxy($playlistInner, 'click', e => {\n const { optionIndex } = e.target.dataset;\n if (optionIndex && Number(optionIndex) <= playlist.length - 1) {\n switchUrl(optionIndex);\n }\n });\n\n proxy($playlist, 'click', e => {\n if (e.target === $playlist) {\n $playlist.style.display = 'none';\n }\n });\n\n art.on('video:ended', () => {\n nextVideo().then(() => {\n sleep(1000).then(player.play);\n });\n });\n\n art.on('afterAttachUrl', () => {\n const index = playlist.findIndex(item => item.url === $video.src);\n const $item = Array.from($playlistInner.children)[index];\n if (index !== -1 && $item) {\n inverseClass($item, 'active');\n }\n });\n\n return {\n name: 'artplayerPluginPlaylist',\n load(list) {\n errorHandle(Array.isArray(list), 'Playlist is not an array type');\n errorHandle(list.length > 0, 'Playlist cannot be empty');\n playlist = list.map(item => {\n errorHandle(item.url, 'Playlist items require url attribute');\n errorHandle(item.title, 'Playlist items require title attribute');\n return item;\n });\n $playlistInner.innerHTML = playlist\n .map((item, index) => {\n return `<div class=\"artplay-playlist-item\" data-option-index=\"${index}\">${item.title}</div>`;\n })\n .join('');\n },\n show() {\n $playlist.style.display = 'flex';\n },\n hide() {\n $playlist.style.display = 'none';\n },\n next() {\n nextVideo();\n },\n prev() {\n prevVideo();\n },\n };\n}\n\nexport default artplayerPluginPlaylist;\n"],"names":["artplayerPluginPlaylist","art","constructor","utils","append","errorHandle","sleep","inverseClass","player","proxy","events","template","$player","$video","$playlist","playlist","$playlistInner","querySelector","switchUrl","index","itemOption","url","title","then","emit","prevVideo","findIndex","item","src","length","prevIndex","nextVideo","nextIndex","e","optionIndex","target","dataset","Number","style","display","on","play","$item","Array","from","children","name","load","list","isArray","map","innerHTML","join","show","hide","next","prev"],"mappings":";;;;;;IAEA,SAASA,uBAAT,CAAiCC,GAAjC,EAAsC;IAAA,8BAG9BA,GAAG,CAACC,WAH0B,CAE9BC,KAF8B;IAAA,MAErBC,MAFqB,yBAErBA,MAFqB;IAAA,MAEbC,WAFa,yBAEbA,WAFa;IAAA,MAEAC,KAFA,yBAEAA,KAFA;IAAA,MAEOC,YAFP,yBAEOA,YAFP;IAAA,MAK9BC,MAL8B,GAQ9BP,GAR8B,CAK9BO,MAL8B;IAAA,MAMpBC,KANoB,GAQ9BR,GAR8B,CAM9BS,MAN8B,CAMpBD,KANoB;IAAA,sBAQ9BR,GAR8B,CAO9BU,QAP8B;IAAA,MAOlBC,OAPkB,iBAOlBA,OAPkB;IAAA,MAOTC,MAPS,iBAOTA,MAPS;IAUlC,MAAMC,SAAS,GAAGV,MAAM,CACpBQ,OADoB,+HAAxB;IASA,MAAIG,QAAQ,GAAG,EAAf;IACA,MAAMC,cAAc,GAAGF,SAAS,CAACG,aAAV,CAAwB,yBAAxB,CAAvB;;IAEA,WAASC,SAAT,CAAmBC,KAAnB,EAA0B;IACtB,QAAMC,UAAU,GAAGL,QAAQ,CAACI,KAAD,CAA3B;IACA,WAAOX,MAAM,CAACU,SAAP,CAAiBE,UAAU,CAACC,GAA5B,EAAiCD,UAAU,CAACE,KAA5C,EAAmDC,IAAnD,CAAwD,YAAM;IACjEtB,MAAAA,GAAG,CAACuB,IAAJ,CAAS,gCAAT,EAA2CJ,UAA3C;IACH,KAFM,CAAP;IAGH;;IAED,WAASK,SAAT,GAAqB;IACjB,QAAMN,KAAK,GAAGJ,QAAQ,CAACWLine truncated
|
{"version":3,"file":"artplayer-plugin-playlist.js","sources":["../../packages/artplayer-plugin-playlist/src/index.js"],"sourcesContent":["import './index.scss';\n\nfunction artplayerPluginPlaylist(list) {\n return art => {\n const {\n utils: { append, errorHandle, sleep, inverseClass },\n } = art.constructor;\n const {\n player,\n events: { proxy },\n template: { $player, $video },\n } = art;\n\n const $playlist = append(\n $player,\n `\n <div class=\"artplay-playlist\">\n <div class=\"artplay-playlist-inner\"></div>\n </div>\n `,\n );\n\n errorHandle(Array.isArray(list), 'Playlist is not an array type');\n errorHandle(list.length > 0, 'Playlist cannot be empty');\n const playlist = list.map(item => {\n errorHandle(item.url, 'Playlist items require url attribute');\n errorHandle(item.title, 'Playlist items require title attribute');\n return item;\n });\n\n const $playlistInner = $playlist.querySelector('.artplay-playlist-inner');\n $playlistInner.innerHTML = playlist\n .map((item, index) => {\n return `<div class=\"artplay-playlist-item\" data-option-index=\"${index}\">${item.title}</div>`;\n })\n .join('');\n\n function switchUrl(index) {\n const itemOption = playlist[index];\n return player.switchUrl(itemOption.url, itemOption.title).then(() => {\n art.emit('artplayerPluginPlaylist:change', itemOption);\n });\n }\n\n function prevVideo() {\n const index = playlist.findIndex(item => item.url === $video.src);\n errorHandle(index !== -1, \"Can't find Playlist item\");\n if (playlist.length === 1) {\n return switchUrl(0);\n }\n const prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;\n return switchUrl(prevIndex);\n }\n\n function nextVideo() {\n const index = playlist.findIndex(item => item.url === $video.src);\n errorHandle(index !== -1, \"Can't find Playlist item\");\n if (playlist.length === 1) {\n return switchUrl(0);\n }\n const nextIndex = index + 1 === playlist.length ? 0 : index + 1;\n return switchUrl(nextIndex);\n }\n\n proxy($playlistInner, 'click', e => {\n const { optionIndex } = e.target.dataset;\n if (optionIndex && Number(optionIndex) <= playlist.length - 1) {\n switchUrl(optionIndex);\n }\n });\n\n proxy($playlist, 'click', e => {\n if (e.target === $playlist) {\n $playlist.style.display = 'none';\n }\n });\n\n art.on('video:ended', () => {\n nextVideo().then(() => {\n sleep(1000).then(player.play);\n });\n });\n\n art.on('afterAttachUrl', () => {\n const index = playlist.findIndex(item => item.url === $video.src);\n const $item = Array.from($playlistInner.children)[index];\n if (index !== -1 && $item) {\n inverseClass($item, 'active');\n }\n });\n\n return {\n name: 'artplayerPluginPlaylist',\n show() {\n $playlist.style.display = 'flex';\n },\n hide() {\n $playlist.style.display = 'none';\n },\n next() {\n nextVideo();\n },\n prev() {\n prevVideo();\n },\n };\n };\n}\n\nexport default artplayerPluginPlaylist;\n"],"names":["artplayerPluginPlaylist","list","art","constructor","utils","append","errorHandle","sleep","inverseClass","player","proxy","events","template","$player","$video","$playlist","Array","isArray","length","playlist","map","item","url","title","$playlistInner","querySelector","innerHTML","index","join","switchUrl","itemOption","then","emit","prevVideo","findIndex","src","prevIndex","nextVideo","nextIndex","e","optionIndex","target","dataset","Number","style","display","on","play","$item","from","children","name","show","hide","next","prev"],"mappings":";;;;;;IAEA,SAASA,uBAAT,CAAiCC,IAAjC,EAAuC;IACnC,SAAO,UAAAC,GAAG,EAAI;IAAA,gCAGNA,GAAG,CAACC,WAHE,CAENC,KAFM;IAAA,QAEGC,MAFH,yBAEGA,MAFH;IAAA,QAEWC,WAFX,yBAEWA,WAFX;IAAA,QAEwBC,KAFxB,yBAEwBA,KAFxB;IAAA,QAE+BC,YAF/B,yBAE+BA,YAF/B;IAAA,QAKNC,MALM,GAQNP,GARM,CAKNO,MALM;IAAA,QAMIC,KANJ,GAQNR,GARM,CAMNS,MANM,CAMID,KANJ;IAAA,wBAQNR,GARM,CAONU,QAPM;IAAA,QAOMC,OAPN,iBAOMA,OAPN;IAAA,QAOeC,MAPf,iBAOeA,MAPf;IAUV,QAAMC,SAAS,GAAGV,MAAM,CACpBQ,OADoB,+IAAxB;IASAP,IAAAA,WAAW,CAACU,KAAK,CAACC,OAAN,CAAchB,IAAd,CAAD,EAAsB,+BAAtB,CAAX;IACAK,IAAAA,WAAW,CAACL,IAAI,CAACiB,MAAL,GAAc,CAAf,EAAkB,0BAAlB,CAAX;IACA,QALine truncated
|
||||||
@@ -1168,7 +1168,6 @@
|
|||||||
return art.template.$video.currentTime || 0;
|
return art.template.$video.currentTime || 0;
|
||||||
},
|
},
|
||||||
set: function set(currentTime) {
|
set: function set(currentTime) {
|
||||||
errorHandle(player.duration, 'Cannot set current time, the video seems to be not ready for mate information.');
|
|
||||||
art.template.$video.currentTime = clamp(currentTime, 0, player.duration);
|
art.template.$video.currentTime = clamp(currentTime, 0, player.duration);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../packages/artplayer/node_modules/tiny-emitter/index.js","../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../packages/artplayer/src/utils/index.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/mimeCodec.js","../../packages/artplayer/src/config/mse.js","../../packages/artplayer/src/config/video.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/zh-cn.js","../../packages/artplayer/src/i18n/zh-tw.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/attachUrlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMin.js","../../packages/artplayer/src/player/toggleMix.js","../../packages/artplayer/src/player/seekMix.js","../../packages/artplayer/src/player/volumeMix.js","../../packages/artplayer/src/player/currentTimeMix.js","../../packages/artplayer/src/player/durationMix.js","../../packages/artplayer/src/player/switchMix.js","../../packages/artplayer/src/player/playbackRateMix.js","../../packages/artplayer/src/player/aspectRatioMix.js","../../packages/artplayer/src/player/screenshotMix.js","../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../packages/artplayer/src/player/fullscreenMix.js","../../packages/artplayer/src/player/fullscreenWebMix.js","../../packages/artplayer/node_modules/get-size/get-size.js","../../packages/artplayer/node_modules/ev-emitter/ev-emitter.js","../../packages/artplayer/node_modules/unipointer/unipointer.js","../../packages/artplayer/node_modules/unidragger/unidragger.js","../../packages/artplayer/node_modules/draggabilly/draggabilly.js","../../packages/artplayer/src/player/pipMix.js","../../packages/artplayer/src/player/loadedMix.js","../../packages/artplayer/src/player/playedMix.js","../../packages/artplayer/src/player/playingMix.js","../../packages/artplayer/src/player/autoSizeMix.js","../../packages/artplayer/src/player/rectMix.js","../../packages/artplayer/src/player/flipMix.js","../../packages/artplayer/src/player/index.js","../../packages/artplayer/src/utils/component.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../packages/artplayer/src/controls/fullscreen.js","../../packages/artplayer/src/controls/fullscreenWeb.js","../../packages/artplayer/src/controls/pip.js","../../packages/artplayer/src/controls/playAndPause.js","../../packages/artplayer/src/controls/progress.js","../../packages/artplayer/src/controls/subtitle.js","../../packages/artplayer/src/controls/time.js","../../packages/artplayer/src/controls/volume.js","../../packages/artplayer/src/controls/setting.js","../../packages/artplayer/src/controls/thumbnails.js","../../packages/artplayer/src/controls/screenshot.js","../../packages/artplayer/src/controls/quality.js","../../packages/artplayer/src/controls/index.js","../../packages/artplayer/src/contextmenu/playbackRate.js","../../packages/artplayer/src/contextmenu/aspectRatio.js","../../packages/artplayer/src/contextmenu/info.js","../../packages/artplayer/src/contextmenu/version.js","../../packages/artplayer/src/contextmenu/close.js","../../packages/artplayer/src/contextmenu/index.js","../../packages/artplayer/src/info.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../packages/artplayer/src/subtitle.js","../../packages/artplayer/src/events/clickInit.js","../../packages/artplayer/src/events/hoverInit.js","../../packages/artplayer/src/events/mousemoveInit.js","../../packages/artplayer/node_modules/resize-observer/lib/ContentRect.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObservation.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObserverEntry.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObserver.js","Line truncated
|
{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../packages/artplayer/node_modules/tiny-emitter/index.js","../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../packages/artplayer/src/utils/index.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/mimeCodec.js","../../packages/artplayer/src/config/mse.js","../../packages/artplayer/src/config/video.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/zh-cn.js","../../packages/artplayer/src/i18n/zh-tw.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/attachUrlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMin.js","../../packages/artplayer/src/player/toggleMix.js","../../packages/artplayer/src/player/seekMix.js","../../packages/artplayer/src/player/volumeMix.js","../../packages/artplayer/src/player/currentTimeMix.js","../../packages/artplayer/src/player/durationMix.js","../../packages/artplayer/src/player/switchMix.js","../../packages/artplayer/src/player/playbackRateMix.js","../../packages/artplayer/src/player/aspectRatioMix.js","../../packages/artplayer/src/player/screenshotMix.js","../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../packages/artplayer/src/player/fullscreenMix.js","../../packages/artplayer/src/player/fullscreenWebMix.js","../../packages/artplayer/node_modules/get-size/get-size.js","../../packages/artplayer/node_modules/ev-emitter/ev-emitter.js","../../packages/artplayer/node_modules/unipointer/unipointer.js","../../packages/artplayer/node_modules/unidragger/unidragger.js","../../packages/artplayer/node_modules/draggabilly/draggabilly.js","../../packages/artplayer/src/player/pipMix.js","../../packages/artplayer/src/player/loadedMix.js","../../packages/artplayer/src/player/playedMix.js","../../packages/artplayer/src/player/playingMix.js","../../packages/artplayer/src/player/autoSizeMix.js","../../packages/artplayer/src/player/rectMix.js","../../packages/artplayer/src/player/flipMix.js","../../packages/artplayer/src/player/index.js","../../packages/artplayer/src/utils/component.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../packages/artplayer/src/controls/fullscreen.js","../../packages/artplayer/src/controls/fullscreenWeb.js","../../packages/artplayer/src/controls/pip.js","../../packages/artplayer/src/controls/playAndPause.js","../../packages/artplayer/src/controls/progress.js","../../packages/artplayer/src/controls/subtitle.js","../../packages/artplayer/src/controls/time.js","../../packages/artplayer/src/controls/volume.js","../../packages/artplayer/src/controls/setting.js","../../packages/artplayer/src/controls/thumbnails.js","../../packages/artplayer/src/controls/screenshot.js","../../packages/artplayer/src/controls/quality.js","../../packages/artplayer/src/controls/index.js","../../packages/artplayer/src/contextmenu/playbackRate.js","../../packages/artplayer/src/contextmenu/aspectRatio.js","../../packages/artplayer/src/contextmenu/info.js","../../packages/artplayer/src/contextmenu/version.js","../../packages/artplayer/src/contextmenu/close.js","../../packages/artplayer/src/contextmenu/index.js","../../packages/artplayer/src/info.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../packages/artplayer/src/subtitle.js","../../packages/artplayer/src/events/clickInit.js","../../packages/artplayer/src/events/hoverInit.js","../../packages/artplayer/src/events/mousemoveInit.js","../../packages/artplayer/node_modules/resize-observer/lib/ContentRect.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObservation.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObserverEntry.js","../../packages/artplayer/node_modules/resize-observer/lib/ResizeObserver.js","Line truncated
|
||||||
@@ -40,21 +40,20 @@ Will expose the global variable to `window.artplayerPluginPlaylist`.
|
|||||||
var art = new Artplayer({
|
var art = new Artplayer({
|
||||||
container: '.artplayer-app',
|
container: '.artplayer-app',
|
||||||
url: 'path/to/video.mp4',
|
url: 'path/to/video.mp4',
|
||||||
plugins: [artplayerPluginPlaylist],
|
plugins: [
|
||||||
|
artplayerPluginPlaylist([
|
||||||
|
{
|
||||||
|
title: 'video01',
|
||||||
|
url: 'path/to/video01.mp4',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'video02',
|
||||||
|
url: 'path/to/video02.mp4',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
// Load Playlist
|
|
||||||
art.plugins.artplayerPluginPlaylist.load([
|
|
||||||
{
|
|
||||||
title: 'video01',
|
|
||||||
url: 'path/to/video01.mp4',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'video02',
|
|
||||||
url: 'path/to/video02.mp4',
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Show Playlist
|
// Show Playlist
|
||||||
art.plugins.artplayerPluginPlaylist.show();
|
art.plugins.artplayerPluginPlaylist.show();
|
||||||
|
|
||||||
|
|||||||
@@ -1,109 +1,109 @@
|
|||||||
import './index.scss';
|
import './index.scss';
|
||||||
|
|
||||||
function artplayerPluginPlaylist(art) {
|
function artplayerPluginPlaylist(list) {
|
||||||
const {
|
return art => {
|
||||||
utils: { append, errorHandle, sleep, inverseClass },
|
const {
|
||||||
} = art.constructor;
|
utils: { append, errorHandle, sleep, inverseClass },
|
||||||
const {
|
} = art.constructor;
|
||||||
player,
|
const {
|
||||||
events: { proxy },
|
player,
|
||||||
template: { $player, $video },
|
events: { proxy },
|
||||||
} = art;
|
template: { $player, $video },
|
||||||
|
} = art;
|
||||||
|
|
||||||
const $playlist = append(
|
const $playlist = append(
|
||||||
$player,
|
$player,
|
||||||
`
|
`
|
||||||
<div class="artplay-playlist">
|
<div class="artplay-playlist">
|
||||||
<div class="artplay-playlist-inner"></div>
|
<div class="artplay-playlist-inner"></div>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
);
|
);
|
||||||
|
|
||||||
let playlist = [];
|
errorHandle(Array.isArray(list), 'Playlist is not an array type');
|
||||||
const $playlistInner = $playlist.querySelector('.artplay-playlist-inner');
|
errorHandle(list.length > 0, 'Playlist cannot be empty');
|
||||||
|
const playlist = list.map(item => {
|
||||||
function switchUrl(index) {
|
errorHandle(item.url, 'Playlist items require url attribute');
|
||||||
const itemOption = playlist[index];
|
errorHandle(item.title, 'Playlist items require title attribute');
|
||||||
return player.switchUrl(itemOption.url, itemOption.title).then(() => {
|
return item;
|
||||||
art.emit('artplayerPluginPlaylist:change', itemOption);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function prevVideo() {
|
const $playlistInner = $playlist.querySelector('.artplay-playlist-inner');
|
||||||
const index = playlist.findIndex(item => item.url === $video.src);
|
$playlistInner.innerHTML = playlist
|
||||||
errorHandle(index !== -1, "Can't find Playlist item");
|
.map((item, index) => {
|
||||||
if (playlist.length === 1) {
|
return `<div class="artplay-playlist-item" data-option-index="${index}">${item.title}</div>`;
|
||||||
return switchUrl(0);
|
})
|
||||||
}
|
.join('');
|
||||||
const prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;
|
|
||||||
return switchUrl(prevIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
function nextVideo() {
|
function switchUrl(index) {
|
||||||
const index = playlist.findIndex(item => item.url === $video.src);
|
const itemOption = playlist[index];
|
||||||
errorHandle(index !== -1, "Can't find Playlist item");
|
return player.switchUrl(itemOption.url, itemOption.title).then(() => {
|
||||||
if (playlist.length === 1) {
|
art.emit('artplayerPluginPlaylist:change', itemOption);
|
||||||
return switchUrl(0);
|
|
||||||
}
|
|
||||||
const nextIndex = index + 1 === playlist.length ? 0 : index + 1;
|
|
||||||
return switchUrl(nextIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy($playlistInner, 'click', e => {
|
|
||||||
const { optionIndex } = e.target.dataset;
|
|
||||||
if (optionIndex && Number(optionIndex) <= playlist.length - 1) {
|
|
||||||
switchUrl(optionIndex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
proxy($playlist, 'click', e => {
|
|
||||||
if (e.target === $playlist) {
|
|
||||||
$playlist.style.display = 'none';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
art.on('video:ended', () => {
|
|
||||||
nextVideo().then(() => {
|
|
||||||
sleep(1000).then(player.play);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
art.on('afterAttachUrl', () => {
|
|
||||||
const index = playlist.findIndex(item => item.url === $video.src);
|
|
||||||
const $item = Array.from($playlistInner.children)[index];
|
|
||||||
if (index !== -1 && $item) {
|
|
||||||
inverseClass($item, 'active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: 'artplayerPluginPlaylist',
|
|
||||||
load(list) {
|
|
||||||
errorHandle(Array.isArray(list), 'Playlist is not an array type');
|
|
||||||
errorHandle(list.length > 0, 'Playlist cannot be empty');
|
|
||||||
playlist = list.map(item => {
|
|
||||||
errorHandle(item.url, 'Playlist items require url attribute');
|
|
||||||
errorHandle(item.title, 'Playlist items require title attribute');
|
|
||||||
return item;
|
|
||||||
});
|
});
|
||||||
$playlistInner.innerHTML = playlist
|
}
|
||||||
.map((item, index) => {
|
|
||||||
return `<div class="artplay-playlist-item" data-option-index="${index}">${item.title}</div>`;
|
function prevVideo() {
|
||||||
})
|
const index = playlist.findIndex(item => item.url === $video.src);
|
||||||
.join('');
|
errorHandle(index !== -1, "Can't find Playlist item");
|
||||||
},
|
if (playlist.length === 1) {
|
||||||
show() {
|
return switchUrl(0);
|
||||||
$playlist.style.display = 'flex';
|
}
|
||||||
},
|
const prevIndex = index - 1 === -1 ? playlist.length - 1 : index - 1;
|
||||||
hide() {
|
return switchUrl(prevIndex);
|
||||||
$playlist.style.display = 'none';
|
}
|
||||||
},
|
|
||||||
next() {
|
function nextVideo() {
|
||||||
nextVideo();
|
const index = playlist.findIndex(item => item.url === $video.src);
|
||||||
},
|
errorHandle(index !== -1, "Can't find Playlist item");
|
||||||
prev() {
|
if (playlist.length === 1) {
|
||||||
prevVideo();
|
return switchUrl(0);
|
||||||
},
|
}
|
||||||
|
const nextIndex = index + 1 === playlist.length ? 0 : index + 1;
|
||||||
|
return switchUrl(nextIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy($playlistInner, 'click', e => {
|
||||||
|
const { optionIndex } = e.target.dataset;
|
||||||
|
if (optionIndex && Number(optionIndex) <= playlist.length - 1) {
|
||||||
|
switchUrl(optionIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
proxy($playlist, 'click', e => {
|
||||||
|
if (e.target === $playlist) {
|
||||||
|
$playlist.style.display = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
art.on('video:ended', () => {
|
||||||
|
nextVideo().then(() => {
|
||||||
|
sleep(1000).then(player.play);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
art.on('afterAttachUrl', () => {
|
||||||
|
const index = playlist.findIndex(item => item.url === $video.src);
|
||||||
|
const $item = Array.from($playlistInner.children)[index];
|
||||||
|
if (index !== -1 && $item) {
|
||||||
|
inverseClass($item, 'active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'artplayerPluginPlaylist',
|
||||||
|
show() {
|
||||||
|
$playlist.style.display = 'flex';
|
||||||
|
},
|
||||||
|
hide() {
|
||||||
|
$playlist.style.display = 'none';
|
||||||
|
},
|
||||||
|
next() {
|
||||||
|
nextVideo();
|
||||||
|
},
|
||||||
|
prev() {
|
||||||
|
prevVideo();
|
||||||
|
},
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
import { clamp, errorHandle } from '../utils';
|
import { clamp } from '../utils';
|
||||||
|
|
||||||
export default function currentTimeMix(art, player) {
|
export default function currentTimeMix(art, player) {
|
||||||
Object.defineProperty(player, 'currentTime', {
|
Object.defineProperty(player, 'currentTime', {
|
||||||
get: () => art.template.$video.currentTime || 0,
|
get: () => art.template.$video.currentTime || 0,
|
||||||
set: currentTime => {
|
set: currentTime => {
|
||||||
errorHandle(
|
|
||||||
player.duration,
|
|
||||||
'Cannot set current time, the video seems to be not ready for mate information.',
|
|
||||||
);
|
|
||||||
art.template.$video.currentTime = clamp(currentTime, 0, player.duration);
|
art.template.$video.currentTime = clamp(currentTime, 0, player.duration);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user