diff --git a/packages/artplayer-document/docs/en/Options.md b/packages/artplayer-document/docs/en/Options.md
index cd3c32c68..0971f6cc4 100644
--- a/packages/artplayer-document/docs/en/Options.md
+++ b/packages/artplayer-document/docs/en/Options.md
@@ -618,6 +618,62 @@ var art = new Artplayer({
});
```
+## settings
+
+- Type: `Array`
+- Default: `[]`
+
+Initialize custom setting panel
+
+| Property | Type | Description |
+| --------- | ------------------- | ------------------------------------------------------------- |
+| `disable` | `Boolean` | Whether to disable the component |
+| `name` | `String` | The unique name of the component, used to mark the class name |
+| `index` | `Number` | Component index, priority for display |
+| `html` | `String`、`Element` | DOM element of the component |
+| `style` | `Object` | Component style object |
+| `click` | `Function` | Component click event |
+| `mounted` | `Function` | Triggered after the component is mounted |
+| `tooltip` | `String` | Prompt text of the component |
+
+
▶ Run Code
+
+```js
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: '/assets/sample/video.mp4',
+ setting: true,
+ settings: [
+ {
+ disable: false,
+ name: 'button',
+ index: 10,
+ html: 'Custom button1',
+ tooltip: 'Custom button1',
+ style: {
+ color: 'red',
+ },
+ click: function () {
+ console.log('You clicked custom button 1');
+ },
+ mounted: function () {
+ console.log('Custom button mounting is complete 1');
+ },
+ },
+ {
+ html: 'Custom button2',
+ tooltip: 'Custom button2',
+ style: {
+ color: 'green',
+ },
+ click: function () {
+ console.log('You clicked custom button 2');
+ },
+ },
+ ],
+});
+```
+
## contextmenu
- Type: `Array`
diff --git a/packages/artplayer-document/docs/zh-cn/Options.md b/packages/artplayer-document/docs/zh-cn/Options.md
index 5880c7dab..619044ed9 100644
--- a/packages/artplayer-document/docs/zh-cn/Options.md
+++ b/packages/artplayer-document/docs/zh-cn/Options.md
@@ -618,6 +618,62 @@ var art = new Artplayer({
});
```
+## settings
+
+- 类型: `Array`
+- 默认: `[]`
+
+初始化自定义的设置面板
+
+| 属性 | 类型 | 描述 |
+| --------- | ------------------- | -------------------------- |
+| `disable` | `Boolean` | 是否禁用组件 |
+| `name` | `String` | 组件唯一名称,用于标记类名 |
+| `index` | `Number` | 组件索引,用于显示的优先级 |
+| `html` | `String`、`Element` | 组件的 DOM 元素 |
+| `style` | `Object` | 组件样式对象 |
+| `click` | `Function` | 组件点击事件 |
+| `mounted` | `Function` | 组件挂载后触发 |
+| `tooltip` | `String` | 组件的提示文本 |
+
+▶ Run Code
+
+```js
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: '/assets/sample/video.mp4',
+ setting: true,
+ settings: [
+ {
+ disable: false,
+ name: 'button',
+ index: 10,
+ html: '自定义按钮',
+ tooltip: '自定义按钮的提示1',
+ style: {
+ color: 'red',
+ },
+ click: function () {
+ console.log('你点击了自定义按钮1');
+ },
+ mounted: function () {
+ console.log('自定义按钮挂载完成1');
+ },
+ },
+ {
+ html: '自定义按钮2',
+ tooltip: '自定义按钮的提示2',
+ style: {
+ color: 'green',
+ },
+ click: function () {
+ console.log('你点击了自定义按钮2');
+ },
+ },
+ ],
+});
+```
+
## contextmenu
- 类型: `Array`
diff --git a/packages/artplayer-document/docs/zh-cn/Questions/Handle single component.md b/packages/artplayer-document/docs/zh-cn/Questions/Handle single component.md
index 0e5f860cc..bd3e9d552 100644
--- a/packages/artplayer-document/docs/zh-cn/Questions/Handle single component.md
+++ b/packages/artplayer-document/docs/zh-cn/Questions/Handle single component.md
@@ -50,13 +50,13 @@ art.on('ready', () => {
}
});
- // Use the query method to get the DOM element of the component
+ // 使用查询 query 获取组件的DOM元素
var $layer1 = art.query('.art-layer-layer1');
var $contextmenu1 = art.query('.art-contextmenu-contextmenu1');
var $control1 = art.query('.art-control-control1');
var $setting1 = art.query('.art-setting-setting1');
- // Recommended use the name to get the DOM element of the component
+ // 推荐使用 name 获取组件的DOM元素
var $layer1 = art.layers['layer1'];
var $contextmenu1 = art.contextmenu['contextmenu1'];
var $control1 = art.controls['control1'];
diff --git a/packages/artplayer/package.json b/packages/artplayer/package.json
index bd4ebfefc..efa952d5e 100644
--- a/packages/artplayer/package.json
+++ b/packages/artplayer/package.json
@@ -1,6 +1,6 @@
{
"name": "artplayer",
- "version": "4.0.0",
+ "version": "4.0.1",
"expose": "Artplayer",
"description": "ArtPlayer.js is a modern and full featured HTML5 video player",
"main": "dist/artplayer.js",
diff --git a/packages/artplayer/src/index.js b/packages/artplayer/src/index.js
index 420335d61..4fc138a47 100644
--- a/packages/artplayer/src/index.js
+++ b/packages/artplayer/src/index.js
@@ -138,6 +138,7 @@ export default class Artplayer extends Emitter {
layers: [],
contextmenu: [],
controls: [],
+ settings: [],
quality: [],
highlight: [],
plugins: [],
diff --git a/packages/artplayer/src/scheme/index.js b/packages/artplayer/src/scheme/index.js
index b72208be1..f5fc1c212 100644
--- a/packages/artplayer/src/scheme/index.js
+++ b/packages/artplayer/src/scheme/index.js
@@ -65,6 +65,7 @@ export default {
whitelist: [`${s}|${f}|${r}`],
layers: [component],
contextmenu: [component],
+ settings: [component],
controls: [
{
...component,
diff --git a/packages/artplayer/src/setting/index.js b/packages/artplayer/src/setting/index.js
index c731b0fa8..55f47955a 100644
--- a/packages/artplayer/src/setting/index.js
+++ b/packages/artplayer/src/setting/index.js
@@ -20,8 +20,8 @@ export default class Setting extends Component {
if (option.setting) {
art.once('ready', () => {
- proxy($setting, 'click', e => {
- if (e.target === $setting) {
+ proxy($setting, 'click', (event) => {
+ if (event.target === $setting) {
this.show = false;
}
});
@@ -53,6 +53,10 @@ export default class Setting extends Component {
name: 'playbackRate',
}),
);
+
+ option.settings.forEach((item) => {
+ this.add(item);
+ });
});
art.on('blur', () => {
diff --git a/packages/artplayer/types/artplayer.d.ts b/packages/artplayer/types/artplayer.d.ts
index af0cc864e..bc7012339 100644
--- a/packages/artplayer/types/artplayer.d.ts
+++ b/packages/artplayer/types/artplayer.d.ts
@@ -53,6 +53,7 @@ export default class Artplayer {
layers?: Component[];
contextmenu?: Component[];
controls?: Component[];
+ settings?: Component[];
quality?: {
default?: boolean;
html: string;