添加设置控制器

This commit is contained in:
Harvey Zack committed 2018-11-02 15:04:16 +08:00
1 parent 711cf5684a
commit 9eab1ed6c0
24 files changed
+297 -119

No files matched your search

+3 -3
View File
@@ -57,7 +57,7 @@ export default class Contextmenu {
if (menu.click) {
proxy($menu, 'click', event => {
event.preventDefault();
menu.click(event);
menu.click.call(this, event);
this.art.emit('contextmenu:click', $menu);
});
}
@@ -67,8 +67,8 @@ export default class Contextmenu {
.sort(
(a, b) =>
Number(a.dataset.artMenuId) - Number(b.dataset.artMenuId)
).forEach($menu => {
append(refs.$contextmenu, $menu);
).forEach(item => {
append(refs.$contextmenu, item);
});
append(refs.$player, refs.$contextmenu);
}
+13 -16
View File
@@ -7,23 +7,20 @@ export default class Danmu {
}
apply(art) {
const { events: { proxy }, danmu, i18n } = art;
this.$danmu = append(this.option.$control, icons.danmu);
this.$danmuClose = append(this.option.$control, icons.danmuClose);
const { $control } = this.option;
const { events: { proxy }, i18n, danmu } = art;
this.$danmu = append($control, icons.danmu);
tooltip(this.$danmu, i18n.get('Hide danmu'));
tooltip(this.$danmuClose, i18n.get('Show danmu'));
setStyle(this.$danmuClose, 'display', 'none');
proxy(this.$danmu, 'click', () => {
danmu.hide();
setStyle(this.$danmu, 'display', 'none');
setStyle(this.$danmuClose, 'display', 'flex');
});
proxy(this.$danmuClose, 'click', () => {
danmu.show();
setStyle(this.$danmu, 'display', 'flex');
setStyle(this.$danmuClose, 'display', 'none');
proxy($control, 'click', () => {
if (danmu.isOpen) {
danmu.hide();
setStyle(this.$danmu, 'opacity', '1');
tooltip(this.$danmu, i18n.get('Show danmu'));
} else {
danmu.show();
setStyle(this.$danmu, 'opacity', '0.8');
tooltip(this.$danmu, i18n.get('Hide danmu'));
}
});
}
}
+9 -9
View File
@@ -55,32 +55,32 @@ export default class Controls {
index: 30
}));
this.add(new Quality({
disable: this.art.option.quality.length === 0,
position: 'right',
index: 10
}));
this.add(new Danmu({
disable: false,
position: 'right',
index: 10
index: 20
}));
this.add(new Screenshot({
disable: !this.art.option.screenshot,
position: 'right',
index: 20
index: 30
}));
this.add(new Subtitle({
disable: !this.art.option.subtitle.url,
position: 'right',
index: 30
}));
this.add(new Quality({
disable: this.art.option.quality.length === 0,
position: 'right',
index: 40
}));
this.add(new Setting({
disable: false,
disable: !this.art.option.setting,
position: 'right',
index: 50
}));
+18 -1
View File
@@ -1,9 +1,26 @@
import { append, tooltip, setStyle } from '../utils';
import icons from '../icons';
export default class Setting {
constructor(option) {
this.option = option;
}
apply(art) {
this.art = art;
const { $control } = this.option;
const { events: { proxy }, i18n, setting } = art;
this.$setting = append($control, icons.setting);
tooltip(this.$setting, i18n.get('Show setting'));
proxy($control, 'click', () => {
if (setting.isOpen) {
setting.hide();
setStyle(this.$setting, 'opacity', '1');
tooltip(this.$setting, i18n.get('Show setting'));
} else {
setting.show();
setStyle(this.$setting, 'opacity', '0.8');
tooltip(this.$setting, i18n.get('Hide setting'));
}
});
}
}
+13 -16
View File
@@ -7,23 +7,20 @@ export default class Subtitle {
}
apply(art) {
const { events: { proxy }, subtitle, i18n } = art;
this.$subtitle = append(this.option.$control, icons.subtitle);
this.$subtitleClose = append(this.option.$control, icons.subtitleClose);
const { $control } = this.option;
const { events: { proxy }, i18n, subtitle } = art;
this.$subtitle = append($control, icons.subtitle);
tooltip(this.$subtitle, i18n.get('Hide subtitle'));
tooltip(this.$subtitleClose, i18n.get('Show subtitle'));
setStyle(this.$subtitleClose, 'display', 'none');
proxy(this.$subtitle, 'click', () => {
subtitle.hide();
setStyle(this.$subtitle, 'display', 'none');
setStyle(this.$subtitleClose, 'display', 'flex');
});
proxy(this.$subtitleClose, 'click', () => {
subtitle.show();
setStyle(this.$subtitle, 'display', 'flex');
setStyle(this.$subtitleClose, 'display', 'none');
proxy($control, 'click', () => {
if (subtitle.isOpen) {
subtitle.hide();
setStyle(this.$subtitle, 'opacity', '1');
tooltip(this.$subtitle, i18n.get('Show subtitle'));
} else {
subtitle.show();
setStyle(this.$subtitle, 'opacity', '0.8');
tooltip(this.$subtitle, i18n.get('Hide subtitle'));
}
});
}
}
+3
View File
@@ -3,6 +3,7 @@ import { setStyle } from './utils';
export default class Danmu {
constructor(art) {
this.art = art;
this.isOpen = true;
this.init();
}
@@ -13,6 +14,7 @@ export default class Danmu {
show() {
const { refs: { $danmu }, i18n, notice } = this.art;
setStyle($danmu, 'display', 'block');
this.isOpen = true;
notice.show(i18n.get('Show danmu'));
this.art.emit('danmu:show', $danmu);
}
@@ -20,6 +22,7 @@ export default class Danmu {
hide() {
const { refs: { $danmu }, i18n, notice } = this.art;
setStyle($danmu, 'display', 'none');
this.isOpen = false;
notice.show(i18n.get('Hide danmu'));
this.art.emit('danmu:hide', $danmu);
}
+6 -2
View File
@@ -19,7 +19,9 @@ let i18nMap = {
'Aspect ratio': '画面比例',
'Default': '默认',
'Normal': '正常',
'Switch': '切换'
'Switch': '切换',
'Hide setting': '隐藏设置',
'Show setting': '显示设置'
},
'zh-tw': {
'About author': '關於作者',
@@ -41,7 +43,9 @@ let i18nMap = {
'Aspect ratio': '畫面比例',
'Default': '默認',
'Normal': '正常',
'Switch': '切換'
'Switch': '切換',
'Hide setting': '隱藏設置',
'Show setting': '顯示設置'
}
};
-3
View File
@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" style="width: 85%; height: 85%; opacity: .5">
<path d="M54,2.5H6c-3.252,0-6,2.748-6,6v33c0,3.252,2.748,6,6,6h14.555l8.702,9.669C29.446,57.38,29.717,57.5,30,57.5 s0.554-0.12,0.743-0.331l8.702-9.669H54c3.252,0,6-2.748,6-6v-33C60,5.248,57.252,2.5,54,2.5z M16,28.5c-2.206,0-4-1.794-4-4 s1.794-4,4-4s4,1.794,4,4S18.206,28.5,16,28.5z M30,28.5c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S32.206,28.5,30,28.5z M44,28.5c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S46.206,28.5,44,28.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 549 B

+2 -4
View File
@@ -5,10 +5,9 @@ import pause from './pause.svg';
import volume from './volume.svg';
import volumeClose from './volume-close.svg';
import subtitle from './subtitle.svg';
import subtitleClose from './subtitle-close.svg';
import screenshot from './screenshot.svg';
import danmu from './danmu.svg';
import danmuClose from './danmu-close.svg';
import setting from './setting.svg';
const icons = {
loading,
@@ -18,10 +17,9 @@ const icons = {
volume,
volumeClose,
subtitle,
subtitleClose,
screenshot,
danmu,
danmuClose
setting
};
function creatDomFromSvg(map) {
+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" style="width: 100%; height: 100%" viewBox="0 0 22 22">
<circle cx="11" cy="11" r="2"></circle>
<path d="M19.164 8.861L17.6 8.6a6.978 6.978 0 0 0-1.186-2.099l.574-1.533a1 1 0 0 0-.436-1.217l-1.997-1.153a1.001 1.001 0 0 0-1.272.23l-1.008 1.225a7.04 7.04 0 0 0-2.55.001L8.716 2.829a1 1 0 0 0-1.272-.23L5.447 3.751a1 1 0 0 0-.436 1.217l.574 1.533A6.997 6.997 0 0 0 4.4 8.6l-1.564.261A.999.999 0 0 0 2 9.847v2.306c0 .489.353.906.836.986l1.613.269a7 7 0 0 0 1.228 2.075l-.558 1.487a1 1 0 0 0 .436 1.217l1.997 1.153c.423.244.961.147 1.272-.23l1.04-1.263a7.089 7.089 0 0 0 2.272 0l1.04 1.263a1 1 0 0 0 1.272.23l1.997-1.153a1 1 0 0 0 .436-1.217l-.557-1.487c.521-.61.94-1.31 1.228-2.075l1.613-.269a.999.999 0 0 0 .835-.986V9.847a.999.999 0 0 0-.836-.986zM11 15a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"></path>
</svg>

After

Width:  |  Height:  |  Size: 843 B

-4
View File
@@ -1,4 +0,0 @@
<svg style="width: 100%; height: 100%; opacity: .5" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0h48v48H0z" fill="none"/>
<path d="M40 8H8c-2.21 0-4 1.79-4 4v24c0 2.21 1.79 4 4 4h32c2.21 0 4-1.79 4-4V12c0-2.21-1.79-4-4-4zM8 24h8v4H8v-4zm20 12H8v-4h20v4zm12 0h-8v-4h8v4zm0-8H20v-4h20v4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 327 B

+3
View File
@@ -19,6 +19,7 @@ import Layers from './layers';
import Loading from './loading';
import Notice from './notice';
import Mask from './mask';
import Setting from './setting';
let id = 0;
export const instances = [];
@@ -66,6 +67,7 @@ class Artplayer extends Emitter {
quality: [],
loading: '',
theme: '#f00',
setting: true,
hotkey: true,
pip: true,
fullscreen: true,
@@ -125,6 +127,7 @@ class Artplayer extends Emitter {
this.loading = new Loading(this);
this.hotkey = new Hotkey(this);
this.mask = new Mask(this);
this.setting = new Setting(this);
this.id = id++;
instances.push(this);
+2 -1
View File
@@ -41,8 +41,9 @@ export default {
}
},
contextmenu: {
type: 'array|function',
type: 'array',
child: {
type: 'object|function',
name: 'string',
html: {
validator: validElement
+37
View File
@@ -0,0 +1,37 @@
import { setStyle } from './utils';
export default class Setting {
constructor(art) {
this.art = art;
this.isOpen = false;
this.init();
}
init() {
//
}
add() {
//
}
switch(name) {
console.log(name);
}
show() {
const { refs: { $setting }, i18n, notice } = this.art;
setStyle($setting, 'display', 'flex');
this.isOpen = true;
notice.show(i18n.get('Show setting'));
this.art.emit('setting:show', $setting);
}
hide() {
const { refs: { $setting }, i18n, notice } = this.art;
setStyle($setting, 'display', 'none');
this.isOpen = false;
notice.show(i18n.get('Hide setting'));
this.art.emit('setting:hide', $setting);
}
}
+4
View File
@@ -129,6 +129,7 @@
height: 36px;
.art-control {
opacity: .9;
float: left;
font-size: 12px;
height: 36px;
@@ -142,6 +143,9 @@
width: 36px;
padding: 7px;
}
&:hover {
opacity: 1;
}
}
.art-control-volume {
+1
View File
@@ -8,5 +8,6 @@ import './loading.scss';
import './bottom.scss';
import './notice.scss';
import './contextmenu.scss';
import './setting.scss';
import './info.scss';
import './aspectRatio.scss';
+1 -1
View File
@@ -4,7 +4,7 @@
position: absolute;
left: 10px;
top: 10px;
z-index: 90;
z-index: 100;
width: 350px;
min-height: 150px;
padding: 10px;
+24
View File
@@ -0,0 +1,24 @@
.artplayer-video-player {
.artplayer-setting {
display: none;
font-size: 14px;
position: absolute;
z-index: 90;
left: 0;
top: 0;
height: 100%;
width: 100%;
align-items: center;
justify-content: center;
pointer-events: none;
.artplayer-setting-inner {
width: 350px;
height: 250px;
padding: 10px;
color: #fff;
background: rgba(0, 0, 0, 0.6);
border-radius: 3px;
pointer-events: all;
}
}
}
+3 -1
View File
@@ -3,7 +3,7 @@ import { errorHandle, getExt, setStyles, setStyle } from './utils';
export default class Subtitle {
constructor(art) {
this.art = art;
this.isOpen = true;
const { url } = this.art.option.subtitle;
if (url) {
this.checkExt(url);
@@ -92,6 +92,7 @@ export default class Subtitle {
show() {
const { refs: { $subtitle }, i18n, notice } = this.art;
setStyle($subtitle, 'display', 'block');
this.isOpen = true;
notice.show(i18n.get('Show subtitle'));
this.art.emit('subtitle:show', $subtitle);
}
@@ -99,6 +100,7 @@ export default class Subtitle {
hide() {
const { refs: { $subtitle }, i18n, notice } = this.art;
setStyle($subtitle, 'display', 'none');
this.isOpen = false;
notice.show(i18n.get('Hide subtitle'));
this.art.emit('subtitle:hide', $subtitle);
}
+5
View File
@@ -24,6 +24,9 @@ export default class Template {
<div class="artplayer-notice">
<div class="artplayer-notice-inner"></div>
</div>
<div class="artplayer-setting">
<div class="artplayer-setting-inner"></div>
</div>
<div class="artplayer-info">
<div class="artplayer-info-panel"></div>
<div class="artplayer-info-close">[x]</div>
@@ -44,6 +47,8 @@ export default class Template {
refs.$notice = refs.$container.querySelector('.artplayer-notice');
refs.$noticeInner = refs.$container.querySelector('.artplayer-notice-inner');
refs.$mask = refs.$container.querySelector('.artplayer-mask');
refs.$setting = refs.$container.querySelector('.artplayer-setting');
refs.$settingInner = refs.$container.querySelector('.artplayer-setting-inner');
refs.$info = refs.$container.querySelector('.artplayer-info');
refs.$infoPanel = refs.$container.querySelector('.artplayer-info-panel');
refs.$infoClose = refs.$container.querySelector('.artplayer-info-close');