规范化play方法

This commit is contained in:
Harvey committed 2021-11-24 12:24:01 +08:00
1 parent 11e871ddc8
commit c5c4cf73eb
29 files changed
+81 -623

No files matched your search

+41 -48
View File
@@ -1151,7 +1151,7 @@
var reconnectTime = 0;
var maxReconnectTime = 5;
proxy($video, 'click', function () {
player.toggle = true;
player.toggle();
});
config.events.forEach(function (eventName) {
proxy($video, eventName, function (event) {
@@ -1179,7 +1179,13 @@
art.on('video:ended', function () {
if (option.loop) {
player.seek = 0;
player.play = player.playing;
if (player.playing) {
player.play();
} else {
player.pause();
}
art.controls.show = false;
art.mask.show = false;
} else {
@@ -1290,30 +1296,26 @@
mutex = art.option.mutex,
$video = art.template.$video;
def(player, 'play', {
set: function set(value) {
if (value) {
var promise = $video.play();
value: function value() {
var promise = $video.play();
if (promise.then) {
promise.then().catch(function (err) {
notice.show = err;
throw err;
});
}
if (mutex) {
instances.filter(function (item) {
return item !== art;
}).forEach(function (item) {
item.player.pause = true;
});
}
notice.show = i18n.get('Play');
art.emit('play');
} else {
player.pause = true;
if (promise.then) {
promise.then().catch(function (err) {
notice.show = err;
throw err;
});
}
if (mutex) {
instances.filter(function (item) {
return item !== art;
}).forEach(function (item) {
item.player.pause();
});
}
notice.show = i18n.get('Play');
art.emit('play');
}
});
}
@@ -1323,30 +1325,21 @@
i18n = art.i18n,
notice = art.notice;
def(player, 'pause', {
get: function get() {
return $video.paused;
},
set: function set(value) {
if (value) {
$video.pause();
notice.show = i18n.get('Pause');
art.emit('pause');
} else {
player.play = true;
}
value: function value() {
$video.pause();
notice.show = i18n.get('Pause');
art.emit('pause');
}
});
}
function toggleMix(art, player) {
def(player, 'toggle', {
set: function set(value) {
if (value) {
if (player.playing) {
player.pause = true;
} else {
player.play = true;
}
value: function value() {
if (player.playing) {
player.pause();
} else {
player.play();
}
}
});
@@ -1447,7 +1440,7 @@
player.currentTime = currentTime;
if (playing) {
player.play = true;
player.play();
}
});
@@ -2709,10 +2702,10 @@
tooltip($play, i18n.get('Play'));
tooltip($pause, i18n.get('Pause'));
proxy($play, 'click', function () {
player.play = true;
player.play();
});
proxy($pause, 'click', function () {
player.pause = true;
player.pause();
});
function showPlay() {
@@ -2900,7 +2893,7 @@
subtitle = art.subtitle;
append($control, icons.subtitle);
proxy($control, 'click', function () {
subtitle.toggle = true;
subtitle.toggle();
});
art.on('subtitle', function (value) {
tooltip($control, i18n.get(value ? 'Hide subtitle' : 'Show subtitle'));
@@ -3031,7 +3024,7 @@
setting = art.setting;
append($control, icons.setting);
proxy($control, 'click', function () {
setting.toggle = true;
setting.toggle();
});
art.on('setting', function (value) {
tooltip($control, i18n.get(value ? 'Hide setting' : 'Show setting'));
@@ -4023,7 +4016,7 @@
});
_this.add(32, function () {
player.toggle = true;
player.toggle();
});
_this.add(37, function () {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"artplayer.js","sources":["../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/createClass.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/inherits.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/typeof.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/_style-inject@0.3.0@style-inject/dist/style-inject.es.js","../../packages/artplayer/node_modules/_option-validator@2.0.6@option-validator/dist/option-validator.js","../../packages/artplayer/src/utils/emitter.js","../../packages/artplayer/src/utils/compatibility.js","../../packages/artplayer/src/utils/dom.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/isNativeFunction.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/construct.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/wrapNativeSuper.js","../../packages/artplayer/src/utils/error.js","../../packages/artplayer/src/utils/subtitle.js","../../packages/artplayer/src/utils/file.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/nonIterableSpread.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/toConsumableArray.js","../../packages/artplayer/src/utils/property.js","../../packages/artplayer/src/utils/time.js","../../packages/artplayer/src/utils/format.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/defineProperty.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/urlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/exclusiveInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMix.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/src/player/fullscreenRotateMix.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/lightMix.js","../../packages/artplayer/src/player/miniMix.js","../../packages/artplayer/src/player/loopMin.js","../../packages/artplayer/src/player/rotateMix.js","../../packages/artplayer/src/player/posterMix.js","../../packages/artplayer/src/player/index.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/superPropBase.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/get.js","../../packages/artplayer/src/utils/component.js","../../packages/artplayer/src/control/fullscreen.js","../../packages/artplayer/src/control/fullscreenWeb.js","../../packages/artplayer/src/control/pip.js","../../packages/artplayer/src/control/playAndPause.js","../../packages/artplayer/src/control/progress.js","../../packages/artplayer/src/control/subtitle.js","../../packages/artplayer/src/control/time.js","../../packages/artplayer/src/control/volume.js","../../packages/artplayer/src/control/setting.js","../../packages/artplayer/src/control/thumLine truncated
{"version":3,"file":"artplayer.js","sources":["../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/createClass.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/inherits.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/typeof.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/_style-inject@0.3.0@style-inject/dist/style-inject.es.js","../../packages/artplayer/node_modules/_option-validator@2.0.6@option-validator/dist/option-validator.js","../../packages/artplayer/src/utils/emitter.js","../../packages/artplayer/src/utils/compatibility.js","../../packages/artplayer/src/utils/dom.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/isNativeFunction.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/construct.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/wrapNativeSuper.js","../../packages/artplayer/src/utils/error.js","../../packages/artplayer/src/utils/subtitle.js","../../packages/artplayer/src/utils/file.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/nonIterableSpread.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/toConsumableArray.js","../../packages/artplayer/src/utils/property.js","../../packages/artplayer/src/utils/time.js","../../packages/artplayer/src/utils/format.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/defineProperty.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/urlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/exclusiveInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMix.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/src/player/fullscreenRotateMix.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/lightMix.js","../../packages/artplayer/src/player/miniMix.js","../../packages/artplayer/src/player/loopMin.js","../../packages/artplayer/src/player/rotateMix.js","../../packages/artplayer/src/player/posterMix.js","../../packages/artplayer/src/player/index.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/superPropBase.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/get.js","../../packages/artplayer/src/utils/component.js","../../packages/artplayer/src/control/fullscreen.js","../../packages/artplayer/src/control/fullscreenWeb.js","../../packages/artplayer/src/control/pip.js","../../packages/artplayer/src/control/playAndPause.js","../../packages/artplayer/src/control/progress.js","../../packages/artplayer/src/control/subtitle.js","../../packages/artplayer/src/control/time.js","../../packages/artplayer/src/control/volume.js","../../packages/artplayer/src/control/setting.js","../../packages/artplayer/src/control/thumLine truncated
-9
View File
@@ -1,9 +0,0 @@
node_modules
.DS_Store
yarn.lock
package-lock.json
test
coverage
.nyc_output
.cache
docs
-1
View File
@@ -1 +0,0 @@
package-lock=false
-73
View File
@@ -1,73 +0,0 @@
# artplayer-plugin-gif
Gif plugin for ArtPlayer, use [gifshot](https://github.com/yahoo/gifshot) as a dependency
## Demo
[Checkout the demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) from Github Pages
## Install
Install with `npm`
```bash
$ npm install artplayer-plugin-gif
```
Or install with `yarn`
```bash
$ yarn add artplayer-plugin-gif
```
```js
import artplayerPluginGif from 'artplayer-plugin-gif';
```
Or umd builds are also available
```html
<script src="artplayer-plugin-gif.js"></script>
```
Will expose the global variable to `window.artplayerPluginGif`.
## Usage
This will add a button called "GIF" in the bottom control bar.
```js
var art = new Artplayer({
container: '.artplayer-app',
url: 'path/to/video.mp4',
controls: [
{
name: 'gif',
position: 'right',
html: '创建GIF',
mounted: $gif => {
art.plugins.artplayerPluginGif.attach($gif);
},
},
],
plugins: [artplayerPluginGif],
});
```
Or can be called via api
```js
art.plugins.artplayerPluginGif.create(
{
// some configuration
// https://github.com/yahoo/gifshot#options
},
function(imageUrl) {
console.log(imageUrl);
},
);
```
## License
MIT © [Harvey Zack](https://sleepy.im/)
@@ -1,8 +0,0 @@
/*!
* artplayer-plugin-gif.js v3.5.31
* Github: https://github.com/zhw2590582/ArtPlayer#readme
* (c) 2017-2021 Harvey Zack
* Released under the MIT License.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).artplayerPluginGif=t()}(this,(function(){"use strict";var e=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(e,t){return e(t={exports:{}},t.exports),t.exports}var r=t((function(e,t){!function(t,r,i,n){var o,a,s={URL:t.URL||t.webkitURL||t.mozURL||t.msURL,getUserMedia:(a=i.getUserMedia||i.webkitGetUserMedia||i.mozGetUserMedia||i.msGetUserMedia,a?a.bind(i):a),requestAnimFrame:t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame,requestTimeout:function(e,t){if(e=e||s.noop,t=t||0,!s.requestAnimFrame)return setTimeout(e,t);var r=(new Date).getTime(),i=new Object,n=s.requestAnimFrame;return i.value=n((function o(){(new Date).getTime()-r>=t?e.call():i.value=n(o)})),i},Blob:t.Blob||t.BlobBuilder||t.WebKitBlobBuilder||t.MozBlobBuilder||t.MSBlobBuilder,btoa:(o=t.btoa||function(e){for(var t="",r=0,i=e.length,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o=void 0,a=void 0,s=void 0,c=void 0,d=void 0,l=void 0,u=void 0;r<i;)c=(o=e.charCodeAt(r++))>>2,d=(3&o)<<4|(a=e.charCodeAt(r++))>>4,l=(15&a)<<2|(s=e.charCodeAt(r++))>>6,u=63&s,isNaN(a)?l=u=64:isNaN(s)&&(u=64),t=t+n.charAt(c)+n.charAt(d)+n.charAt(l)+n.charAt(u);return t},o?o.bind(t):s.noop),isObject:function(e){return e&&"[object Object]"===Object.prototype.toString.call(e)},isEmptyObject:function(e){return s.isObject(e)&&!Object.keys(e).length},isArray:function(e){return e&&Array.isArray(e)},isFunction:function(e){return e&&"function"==typeof e},isElement:function(e){return e&&1===e.nodeType},isString:function(e){return"string"==typeof e||"[object String]"===Object.prototype.toString.call(e)},isSupported:{canvas:function(){var e=r.createElement("canvas");return e&&e.getContext&&e.getContext("2d")},webworkers:function(){return t.Worker},blob:function(){return s.Blob},Uint8Array:function(){return t.Uint8Array},Uint32Array:function(){return t.Uint32Array},videoCodecs:function(){var e=r.createElement("video"),t={mp4:!1,h264:!1,ogv:!1,ogg:!1,webm:!1};try{e&&e.canPlayType&&(t.mp4=""!==e.canPlayType('video/mp4; codecs="mp4v.20.8"'),t.h264=""!==(e.canPlayType('video/mp4; codecs="avc1.42E01E"')||e.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')),t.ogv=""!==e.canPlayType('video/ogg; codecs="theora"'),t.ogg=""!==e.canPlayType('video/ogg; codecs="theora"'),t.webm=-1!==e.canPlayType('video/webm; codecs="vp8, vorbis"'))}catch(e){}return t}()},noop:function(){},each:function(e,t){var r=void 0,i=void 0;if(s.isArray(e))for(r=-1,i=e.length;++r<i&&!1!==t(r,e[r]););else if(s.isObject(e))for(r in e)if(e.hasOwnProperty(r)&&!1===t(r,e[r]))break},mergeOptions:function(e,t){if(s.isObject(e)&&s.isObject(t)&&Object.keys){var r={};return s.each(e,(function(t,i){r[t]=e[t]})),s.each(t,(function(i,n){var o=t[i];s.isObject(o)&&e[i]?r[i]=s.mergeOptions(e[i],o):r[i]=o})),r}},setCSSAttr:function(e,t,r){s.isElement(e)&&(s.isString(t)&&s.isString(r)?e.style[t]=r:s.isObject(t)&&s.each(t,(function(t,r){e.style[t]=r})))},removeElement:function(e){s.isElement(e)&&e.parentNode&&e.parentNode.removeChild(e)},createWebWorker:function(e){if(!s.isString(e))return{};try{var t=new s.Blob([e],{type:"text/javascript"}),r=s.URL.createObjectURL(t);return{objectUrl:r,worker:new Worker(r)}}catch(e){return""+e}},getExtension:function(e){return e.substr(e.lastIndexOf(".")+1,e.length)},getFontSize:function(){var e=arguments.length>0&&arguments[0]!==n?arguments[0]:{};if(!r.body||!1===e.resizeFont)return e.fontSize;var t=e.text,i=e.gifWidth,o=parseInt(e.fontSize,10),a=parseInt(e.minFontSize,10),s=r.createElement("div"),c=r.createElement("span");for(s.setAttribute("width",i),s.appendChild(c),c.innerHTML=t,c.style.fontSize=o+"px",c.style.textIndent="-9999px",c.style.visibility="hidden",r.body.appendChild(c);c.offsetWidth>i&&o>=a;)c.style.fontSize=--o+"px";return r.body.removeChild(c),o+"px"},webWorkerError:!1},c=Object.freeze({default:s}),d={validate:function(e){e=s.isObject(e)?e:{};var t={};return s.each(d.validators,(function(r,i){var n=i.errorCode;if(!e[n]&&!i.condition)return(t=i).error=!0,!1})),delete t.condition,t},isValid:function(e){var t=!0!==d.validate(e).error;return t},validators:[{condition:s.isFunction(s.getUserMedia),errorCode:"getUserMedia",errorMsg:"The getUserMedia API is not supported in your browser"},{condition:s.isSupported.canvas(),errorCode:"canvas",errorMsg:"Canvas elements are not supported in your browser"},{condition:s.isSupported.webworkers(),errorCode:"webworkers",errorMsg:"The Web Workers API is not supported in your browser"},{condition:s.isFunction(s.URL),errorCode:"window.URL",erLine truncated
@@ -1,30 +0,0 @@
{
"name": "artplayer-plugin-gif",
"version": "3.5.31",
"expose": "artplayerPluginGif",
"description": "Gif plugin for ArtPlayer",
"main": "dist/artplayer-plugin-gif.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/zhw2590582/ArtPlayer.git"
},
"keywords": [
"video",
"player"
],
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/zhw2590582/ArtPlayer/issues"
},
"homepage": "https://github.com/zhw2590582/ArtPlayer#readme",
"dependencies": {
"b64-to-blob": "^1.2.19",
"blob-util": "^2.0.2",
"gifshot": "^0.4.5"
},
"gitHead": "5ea211ef738351668e4acace326af4ff6947e2ee"
}
-159
View File
@@ -1,159 +0,0 @@
import gifshot from 'gifshot';
import b64toBlob from 'b64-to-blob';
function artplayerPluginGif(art) {
const { errorHandle, clamp, downloadFile } = art.constructor.utils;
const {
i18n,
notice,
layers,
player,
loading,
option: { theme, title },
events: { proxy },
template: { $video },
} = art;
i18n.update({
'zh-cn': {
'Long press, gif length is between 1 second and 10 seconds': '长按,gif 长度为 1 ~ 10 秒',
'Gif time is too short': 'Gif 时间太短',
'Start creating gif...': '开始创建 gif...',
'Create gif successfully': '创建 gif 成功',
'There is another gif in the processing': '正有另一个 gif 在创建中',
'Release the mouse to start': '放开鼠标即可开始',
},
'zh-tw': {
'Long press, gif length is between 1 second and 10 seconds': '長按,gif 長度為 1 ~ 10 秒',
'Gif time is too short': 'Gif 時間太短',
'Start creating gif...': '開始創建 gif...',
'Create gif successfully': '創建 gif 成功',
'There is another gif in the processing': '正有另一個 gif 在創建中',
'Release the mouse to start': '放開鼠標即可開始',
},
});
let $progress = null;
layers.add(
{
name: 'artplayer-plugin-gif-progress',
style: {
position: 'absolute',
top: '0',
left: '0',
height: '2px',
width: '0%',
'background-color': theme,
},
mounted($ref) {
$progress = $ref;
}
},
);
const timeLimit = 10000;
let isProcessing = false;
let pressStartTime = 0;
let progressTimer = null;
let isPress = false;
let offset = 0;
art.on('destroy', () => {
if (progressTimer) {
clearTimeout(progressTimer);
}
});
function cleanTimer() {
$progress.style.width = '0%';
clearTimeout(progressTimer);
progressTimer = null;
}
function createGif() {
cleanTimer();
const pressTime = new Date() - pressStartTime;
if (isProcessing) {
notice.show = i18n.get('There is another gif in the processing');
} else if (pressTime < 1000) {
notice.show = i18n.get('Gif time is too short');
} else {
const numFrames = Math.floor(clamp(pressTime, 1000, timeLimit) / 100);
const { videoWidth, videoHeight } = $video;
art.plugins.artplayerPluginGif.create(
{
numFrames,
offset: Math.floor(offset),
gifHeight: 200,
gifWidth: (videoWidth / videoHeight) * 200,
},
image => {
downloadFile(image, `${title || 'unnamed'}.gif`);
},
);
}
}
return {
name: 'artplayerPluginGif',
attach($gif) {
proxy($gif, 'mousedown', () => {
isPress = true;
cleanTimer();
offset = player.currentTime;
pressStartTime = new Date();
notice.show = i18n.get('Long press, gif length is between 1 second and 10 seconds');
(function loop() {
progressTimer = setTimeout(() => {
const width = parseInt($progress.style.width, 10);
if (width <= 100) {
$progress.style.width = `${width + 1}%`;
loop();
} else {
notice.show = i18n.get('Release the mouse to start');
}
}, timeLimit / 100);
})();
});
proxy(document, 'mouseup', () => {
if (isPress) {
isPress = false;
createGif();
offset = 0;
}
});
},
create(config = {}, callback) {
isProcessing = true;
loading.show = true;
art.emit('artplayerPluginGif:start');
notice.show = i18n.get('Start creating gif...');
gifshot.createGIF(
{
...config,
video: [$video.src],
crossOrigin: 'anonymous',
},
obj => {
if (obj.error) {
notice.show = obj.errorMsg;
errorHandle(false, obj.errorMsg);
} else if (typeof callback === 'function') {
const base64String = obj.image.split(',')[1];
const blob = b64toBlob(base64String, 'image/gif');
const blobUrl = URL.createObjectURL(blob);
notice.show = i18n.get('Create gif successfully');
art.emit('artplayerPluginGif', blobUrl);
callback(blobUrl);
}
isProcessing = false;
loading.show = false;
art.emit('artplayerPluginGif:end');
},
);
},
};
}
export default artplayerPluginGif;
-9
View File
@@ -1,9 +0,0 @@
node_modules
.DS_Store
yarn.lock
package-lock.json
test
coverage
.nyc_output
.cache
docs
-1
View File
@@ -1 +0,0 @@
package-lock=false
-41
View File
@@ -1,41 +0,0 @@
# artplayer-react
React Component for Artplayer, It is recommended to package itself according to actual business needs.
## Demo
[Checkout the demo](https://codesandbox.io/s/n74859y9rl) from Codesandbox
## Install
Install with `npm`
```bash
$ npm install artplayer-react
```
Or install with `yarn`
```bash
$ yarn add artplayer-react
```
## Usage
```js
import ArtplayerComponent from 'artplayer-react';
// ...
<ArtplayerComponent
option={
{
// option, no 'container' property required
}
}
getInstance={ins => console.log(ins)} // get the instance
/>;
```
## License
MIT © [Harvey Zack](https://sleepy.im/)
-8
View File
@@ -1,8 +0,0 @@
/*!
* artplayer-react.js v3.5.31
* Github: https://github.com/zhw2590582/ArtPlayer#readme
* (c) 2017-2021 Harvey Zack
* Released under the MIT License.
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).ArtplayerReact=e()}(this,(function(){"use strict";var t=function(t,e){if(null==t)return{};var r,n,o={},i=Object.keys(t);for(n=0;n<i.length;n++)r=i[n],e.indexOf(r)>=0||(o[r]=t[r]);return o};var e=function(e,r){if(null==e)return{};var n,o,i=t(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i};var r=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o=n((function(t){function e(r){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?t.exports=e=function(t){return typeof t}:t.exports=e=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(r)}t.exports=e}));var i=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")};function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var c=function(t,e,r){return e&&a(t.prototype,e),r&&a(t,r),t},l=n((function(t){function e(r,n){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(r,n)}t.exports=e}));var s=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&l(t,e)};var u=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t};var f=function(t,e){return!e||"object"!==o(e)&&"function"!=typeof e?u(t):e},p=n((function(t){function e(r){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},e(r)}t.exports=e})),d=Object.getOwnPropertySymbols,y=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable;function m(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var v=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,n,o=m(t),i=1;i<arguments.length;i++){for(var a in r=Object(arguments[i]))y.call(r,a)&&(o[a]=r[a]);if(d){n=d(r);for(var c=0;c<n.length;c++)h.call(r,n[c])&&(o[n[c]]=r[n[c]])}}return o},b="function"==typeof Symbol&&Symbol.for,g=b?Symbol.for("react.element"):60103,w=b?Symbol.for("react.portal"):60106,x=b?Symbol.for("react.fragment"):60107,O=b?Symbol.for("react.strict_mode"):60108,k=b?Symbol.for("react.profiler"):60114,j=b?Symbol.for("react.provider"):60109,P=b?Symbol.for("react.context"):60110,S=b?Symbol.for("react.forward_ref"):60112,R=b?Symbol.for("react.suspense"):60113,E=b?Symbol.for("react.memo"):60115,$=b?Symbol.for("react.lazy"):60116,C="function"==typeof Symbol&&Symbol.iterator;function D(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;r<arguments.length;r++)e+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+t+"; visit "+e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var T={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},A={};function z(t,e,r){this.props=t,this.context=e,this.refs=A,this.updater=r||T}function _(){}function L(t,e,r){this.props=t,this.context=e,this.refs=A,this.updater=r||T}z.prototype.isReactComponent={},z.prototype.setState=function(t,e){if("object"!=typeof t&&"function"!=typeof t&&null!=t)throw Error(D(85));this.updater.enqueueSetState(this,t,e,"setState")},z.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")},_.prototype=z.prototype;var M=L.prototype=new _;M.constructor=L,v(M,z.prototype),M.isPureReactComponent=!0;var I={current:null},q={current:null},F=Object.prototype.hasOwnProperty,N={key:!0,ref:!0,__self:!0,__source:!0};function W(t,e,r){var n,o={},i=null,a=null;if(null!=e)for(n in void 0!==e.ref&&(a=e.ref),void 0!==e.key&&(i=""+e.key),e)F.call(e,n)&&!N.hasOwnProperty(n)&&(o[n]Line truncated
-28
View File
@@ -1,28 +0,0 @@
{
"name": "artplayer-react",
"version": "3.5.31",
"expose": "ArtplayerReact",
"description": "React Component for Artplayer",
"main": "dist/artplayer-react.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/zhw2590582/ArtPlayer.git"
},
"keywords": [
"video",
"player"
],
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/zhw2590582/ArtPlayer/issues"
},
"homepage": "https://github.com/zhw2590582/ArtPlayer#readme",
"dependencies": {
"react": "latest"
},
"gitHead": "5ea211ef738351668e4acace326af4ff6947e2ee"
}
-41
View File
@@ -1,41 +0,0 @@
import React from 'react';
import Artplayer from '../../artplayer/src';
import '../../artplayer/src/style/index.scss';
export default class ArtplayerReact extends React.Component {
constructor(props) {
super(props);
Artplayer.utils.errorHandle(
props.option && typeof props.option === 'object',
"The prop 'option' object cannot be missing",
);
this.instance = null;
this.artRef = React.createRef();
}
componentDidMount() {
const { option, getInstance } = this.props;
this.instance = new Artplayer({
...option,
container: this.artRef.current,
});
if (getInstance && typeof getInstance === 'function') {
getInstance(this.instance);
}
}
componentWillUnmount() {
if (this.instance && this.instance.destroy) {
this.instance.destroy();
}
}
render() {
const { option, getInstance, ...rest } = this.props;
return React.createElement('div', {
ref: this.artRef,
...rest,
});
}
}
-9
View File
@@ -1,9 +0,0 @@
node_modules
.DS_Store
yarn.lock
package-lock.json
test
coverage
.nyc_output
.cache
docs
-1
View File
@@ -1 +0,0 @@
package-lock=false
-39
View File
@@ -1,39 +0,0 @@
# artplayer-vue
Vue Component for Artplayer, It is recommended to package itself according to actual business needs.
## Demo
[Checkout the demo](https://codesandbox.io/s/thirsty-sunset-3lz7m) from Codesandbox
## Install
Install with `npm`
```bash
$ npm install artplayer-vue
```
Or install with `yarn`
```bash
$ yarn add artplayer-vue
```
## Usage
```js
import ArtplayerComponent from 'artplayer-vue';
// ...
<ArtplayerComponent
:option="{
// option, no 'container' property required
}"
@getInstance="ins => console.log(ins)" // get the instance
/>;
```
## License
MIT © [Harvey Zack](https://sleepy.im/)
-8
View File
@@ -1,8 +0,0 @@
/*!
* artplayer-vue.js v3.5.31
* Github: https://github.com/zhw2590582/ArtPlayer#readme
* (c) 2017-2021 Harvey Zack
* Released under the MIT License.
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).ArtplayerVue=e()}(this,(function(){"use strict";var t=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t};var e=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")};function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var n=function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t};var o=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function i(t,e){return t(e={exports:{}},e.exports),e.exports}var a=i((function(t){function e(r,n){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(r,n)}t.exports=e}));var c=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)},s=i((function(t){function e(r){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?t.exports=e=function(t){return typeof t}:t.exports=e=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(r)}t.exports=e}));var l=function(t,e){return!e||"object"!==s(e)&&"function"!=typeof e?o(t):e},u=i((function(t){function e(r){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},e(r)}t.exports=e}));!function(t,e){void 0===e&&(e={});var r=e.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===r&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}('.art-undercover{background:#000;position:fixed;top:0;left:0;display:none;height:100%;width:100%;opacity:.9;z-index:10}.art-video-player{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;margin:0 auto;z-index:20;width:100%;height:100%;outline:0;zoom:1;font-family:Roboto,Arial,Helvetica,sans-serif;color:#eee;background-color:#000;text-align:left;direction:ltr;font-size:14px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:5px}.art-video-player ::-webkit-scrollbar-thumb{background-color:#666}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:#ccc}.art-video-player .art-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1.5}.art-video-player .art-icon svg{fill:#fff}.art-video-player img{max-width:100%;vertical-align:top}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.art-video-player .art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:rgba(0,0,0,.7)!important}}.art-video-player .art-video{z-index:10;background-color:#000;cursor:pointer}.art-video-player .art-poster,.art-video-player .art-video{position:absolute;left:0;top:0;right:0;bottom:0;width:100%;height:100%}.art-video-player .art-poster{z-index:11;background-position:50%;background-repeat:no-repeat;background-size:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.art-video-player .art-subtitle{display:none;position:absolute;z-index:20;bottom:10px;width:100%;padding:0 20px;text-align:center;color:#fff;font-size:20px;pointer-events:none;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.art-video-player .art-subtitle p{word-break:break-all;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin:5px 0 0;line-height:1.2}.art-video-player .art-bilingual p:nth-child(n+2){-webkit-transform:scale(.6);transform:scale(.6);-webkit-transform-origin:center top;transform-origin:center top}.art-video-player.art-subtitle-show .art-subtitle{display:block}.art-video-player.art-control-show .art-subtitle{bottom:50px}.art-video-player .art-danmuku{z-index:30}.art-video-player .art-danmuku,.art-video-player .art-layers{position:absolute;left:0;top:0;Line truncated
-25
View File
@@ -1,25 +0,0 @@
{
"name": "artplayer-vue",
"version": "3.5.31",
"expose": "ArtplayerVue",
"description": "Vue Component for Artplayer",
"main": "dist/artplayer-vue.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/zhw2590582/ArtPlayer.git"
},
"keywords": [
"video",
"player"
],
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/zhw2590582/ArtPlayer/issues"
},
"homepage": "https://github.com/zhw2590582/ArtPlayer#readme",
"gitHead": "5ea211ef738351668e4acace326af4ff6947e2ee"
}
-37
View File
@@ -1,37 +0,0 @@
import Artplayer from '../../artplayer/src';
import '../../artplayer/src/style/index.scss';
export default {
data() {
return {
instance: null,
};
},
props: {
option: {
type: Object,
required: true,
},
getInstance: Function,
},
mounted() {
this.instance = new Artplayer({
...this.option,
container: this.$refs.artRef,
});
this.$nextTick(() => {
this.$emit('getInstance', this.instance);
});
},
beforeDestroy() {
if (this.instance && this.instance.destroy) {
this.instance.destroy();
}
},
render(h) {
return h('div', {
ref: 'artRef',
});
},
};
@@ -17,11 +17,11 @@ export default function playAndPause(option) {
tooltip($pause, i18n.get('Pause'));
proxy($play, 'click', () => {
player.play = true;
player.play();
});
proxy($pause, 'click', () => {
player.pause = true;
player.pause();
});
function showPlay() {
+1 -1
View File
@@ -15,7 +15,7 @@ export default function setting(option) {
append($control, icons.setting);
proxy($control, 'click', () => {
setting.toggle = true;
setting.toggle();
});
art.on('setting', value => {
+1 -1
View File
@@ -15,7 +15,7 @@ export default function subtitle(option) {
append($control, icons.subtitle);
proxy($control, 'click', () => {
subtitle.toggle = true;
subtitle.toggle();
});
art.on('subtitle', value => {
+1 -1
View File
@@ -17,7 +17,7 @@ export default class Hotkey {
});
this.add(32, () => {
player.toggle = true;
player.toggle();
});
this.add(37, () => {
+6 -2
View File
@@ -14,7 +14,7 @@ export default function eventInit(art, player) {
const maxReconnectTime = 5;
proxy($video, 'click', () => {
player.toggle = true;
player.toggle();
});
config.events.forEach((eventName) => {
@@ -54,7 +54,11 @@ export default function eventInit(art, player) {
art.on('video:ended', () => {
if (option.loop) {
player.seek = 0;
player.play = player.playing;
if (player.playing) {
player.play();
} else {
player.pause();
}
art.controls.show = false;
art.mask.show = false;
} else {
+4 -11
View File
@@ -8,17 +8,10 @@ export default function pauseMix(art, player) {
} = art;
def(player, 'pause', {
get() {
return $video.paused;
},
set(value) {
if (value) {
$video.pause();
notice.show = i18n.get('Pause');
art.emit('pause');
} else {
player.play = true;
}
value() {
$video.pause();
notice.show = i18n.get('Pause');
art.emit('pause');
},
});
}
+18 -21
View File
@@ -10,29 +10,26 @@ export default function playMix(art, player) {
} = art;
def(player, 'play', {
set(value) {
if (value) {
const promise = $video.play();
if (promise.then) {
promise.then().catch(err => {
notice.show = err;
throw err;
});
}
value() {
const promise = $video.play();
if (mutex) {
instances
.filter(item => item !== art)
.forEach(item => {
item.player.pause = true;
});
}
notice.show = i18n.get('Play');
art.emit('play');
} else {
player.pause = true;
if (promise.then) {
promise.then().catch((err) => {
notice.show = err;
throw err;
});
}
if (mutex) {
instances
.filter((item) => item !== art)
.forEach((item) => {
item.player.pause();
});
}
notice.show = i18n.get('Play');
art.emit('play');
},
});
}
+1 -1
View File
@@ -15,7 +15,7 @@ export default function switchMix(art, player) {
player.autoSize = true;
player.currentTime = currentTime;
if (playing) {
player.play = true;
player.play();
}
});
if (name) {
+5 -7
View File
@@ -2,13 +2,11 @@ import { def } from '../utils';
export default function toggleMix(art, player) {
def(player, 'toggle', {
set(value) {
if (value) {
if (player.playing) {
player.pause = true;
} else {
player.play = true;
}
value() {
if (player.playing) {
player.pause();
} else {
player.play();
}
},
});