From 73bafc988a7cbb8e152df0c6012e58b5061a3ded Mon Sep 17 00:00:00 2001 From: Harvey Zack Date: Sat, 8 Jun 2024 12:47:24 +0800 Subject: [PATCH] feat: Fix dropdown menu bug in dev.js and build.js --- CHANGELOG_CN.md | 1 + .../artplayer-plugin-vtt-thumbnail/index.js | 86 +++++++++---------- .../index.js.map | 2 +- .../artplayer-tool-thumbnail/index.js | 20 ++--- .../artplayer-tool-thumbnail/index.js.map | 2 +- .../package.json | 4 +- .../src/index.js | 68 ++++++++------- scripts/build.js | 1 - scripts/dev.js | 1 - scripts/utils.js | 1 + 10 files changed, 95 insertions(+), 91 deletions(-) diff --git a/CHANGELOG_CN.md b/CHANGELOG_CN.md index 1b377f921..80e9bdbe7 100644 --- a/CHANGELOG_CN.md +++ b/CHANGELOG_CN.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - 优化 `setBar` 事件 - 新增 `artplayerPluginChapter` 插件 - 新增 `art.plugins.artplayerPluginDanmuku.load(target)` 参数,用于追加弹幕库 +- 修复 `artplayerPluginVttThumbnail` 在移动端不显示的问题 - 修复弹幕插件样式,和字号百分比显示的 `bug` - 移动端也可以看到 `thumbnails` 了 diff --git a/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js b/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js index c78f9475b..f064ff088 100644 --- a/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js +++ b/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js @@ -142,24 +142,25 @@ this[globalName] = mainExports; } } -})({"1gq8W":[function(require,module,exports) { +})({"eYYuT":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); +parcelHelpers.export(exports, "default", ()=>artplayerPluginVttThumbnail); var _getVttArray = require("./getVttArray"); var _getVttArrayDefault = parcelHelpers.interopDefault(_getVttArray); function artplayerPluginVttThumbnail(option) { return async (art)=>{ - const { constructor: { utils: { setStyle , clamp } } , template: { $progress } , events: { proxy } } = art; - const vttArray = await (0, _getVttArrayDefault.default)(option.vtt); - function getPosFromEvent(art, event) { - const { $progress } = art.template; - const { left } = $progress.getBoundingClientRect(); - const width = clamp(event.pageX - left, 0, $progress.clientWidth); - const second = width / $progress.clientWidth * art.duration; - return { - width, - second - }; + const { constructor: { utils: { setStyle, isMobile } }, template: { $progress } } = art; + let timer = null; + const thumbnails = await (0, _getVttArrayDefault.default)(option.vtt); + function showThumbnails($control, find, width) { + setStyle($control, "backgroundImage", `url(${find.url})`); + setStyle($control, "height", `${find.h}px`); + setStyle($control, "width", `${find.w}px`); + setStyle($control, "backgroundPosition", `-${find.x}px -${find.y}px`); + if (width <= find.w / 2) setStyle($control, "left", 0); + else if (width > $progress.clientWidth - find.w / 2) setStyle($control, "left", `${$progress.clientWidth - find.w}px`); + else setStyle($control, "left", `${width - find.w / 2}px`); } art.controls.add({ name: "thumbnails", @@ -167,24 +168,23 @@ function artplayerPluginVttThumbnail(option) { index: 20, style: option.style || {}, mounted ($control) { - proxy($progress, "mousemove", async (event)=>{ - setStyle($control, "display", "block"); - const { second , width } = getPosFromEvent(art, event); - const find = vttArray.find((item)=>second >= item.start && second <= item.end); - if (!find) return setStyle($control, "display", "none"); - setStyle($control, "backgroundImage", `url(${find.url})`); - setStyle($control, "height", `${find.h}px`); - setStyle($control, "width", `${find.w}px`); - setStyle($control, "backgroundPosition", `-${find.x}px -${find.y}px`); - if (width <= find.w / 2) setStyle($control, "left", 0); - else if (width > $progress.clientWidth - find.w / 2) setStyle($control, "left", `${$progress.clientWidth - find.w}px`); - else setStyle($control, "left", `${width - find.w / 2}px`); - }); - proxy($progress, "mouseleave", ()=>{ - setStyle($control, "display", "none"); - }); - art.on("hover", (state)=>{ - if (!state) setStyle($control, "display", "none"); + art.on("setBar", async (type, percentage, event)=>{ + const isMobileDroging = type === "played" && event && isMobile; + if (type === "hover" || isMobileDroging) { + const width = $progress.clientWidth * percentage; + const second = percentage * art.duration; + setStyle($control, "display", "flex"); + const find = thumbnails.find((item)=>second >= item.start && second <= item.end); + if (!find) return setStyle($control, "display", "none"); + if (width > 0 && width < $progress.clientWidth) showThumbnails($control, find, width); + else if (!isMobile) setStyle($control, "display", "none"); + if (isMobileDroging) { + clearTimeout(timer); + timer = setTimeout(()=>{ + setStyle($control, "display", "none"); + }, 500); + } + } }); } }); @@ -193,15 +193,12 @@ function artplayerPluginVttThumbnail(option) { }; }; } -exports.default = artplayerPluginVttThumbnail; -artplayerPluginVttThumbnail.env = "development"; -artplayerPluginVttThumbnail.version = "1.0.0"; -artplayerPluginVttThumbnail.build = "2023-04-23 09:57:46"; if (typeof window !== "undefined") window["artplayerPluginVttThumbnail"] = artplayerPluginVttThumbnail; -},{"./getVttArray":"gSM1I","@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"gSM1I":[function(require,module,exports) { +},{"./getVttArray":"cKvoV","@parcel/transformer-js/src/esmodule-helpers.js":"kBreb"}],"cKvoV":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); +parcelHelpers.export(exports, "default", ()=>getVttArray); function padEnd(str, targetLength, padString) { if (str.length > targetLength) return String(str); else { @@ -234,10 +231,14 @@ async function getVttArray(vttUrl = "") { const textMatch = text.match(textReg); const start = Math.floor(t2d(timeMatch[1])); const end = Math.floor(t2d(timeMatch[2])); - const urlArr = vttUrl.split("/"); - urlArr.pop(); - urlArr.push(textMatch[1]); - const url = urlArr.join("/"); + let url = textMatch[1]; + const isAbsoluteUrl = /^\/|((https?|ftp|file):\/\/)/i.test(url); + if (!isAbsoluteUrl) { + const urlArr = vttUrl.split("/"); + urlArr.pop(); + urlArr.push(url); + url = urlArr.join("/"); + } const result = { start, end, @@ -250,9 +251,8 @@ async function getVttArray(vttUrl = "") { } return vttArray; } -exports.default = getVttArray; -},{"@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"5dUr6":[function(require,module,exports) { +},{"@parcel/transformer-js/src/esmodule-helpers.js":"kBreb"}],"kBreb":[function(require,module,exports) { exports.interopDefault = function(a) { return a && a.__esModule ? a : { default: a @@ -265,7 +265,7 @@ exports.defineInteropFlag = function(a) { }; exports.exportAll = function(source, dest) { Object.keys(source).forEach(function(key) { - if (key === "default" || key === "__esModule" || dest.hasOwnProperty(key)) return; + if (key === "default" || key === "__esModule" || Object.prototype.hasOwnProperty.call(dest, key)) return; Object.defineProperty(dest, key, { enumerable: true, get: function() { @@ -282,6 +282,6 @@ exports.export = function(dest, destName, get) { }); }; -},{}]},["1gq8W"], "1gq8W", "parcelRequire4dc0") +},{}]},["eYYuT"], "eYYuT", "parcelRequire94c2") //# sourceMappingURL=index.js.map diff --git a/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js.map b/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js.map index 726604a43..3bad4ccee 100644 --- a/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js.map +++ b/docs/uncompiled/artplayer-plugin-vtt-thumbnail/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["packages/artplayer-plugin-vtt-thumbnail/src/index.js","packages/artplayer-plugin-vtt-thumbnail/src/getVttArray.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["import getVttArray from './getVttArray';\n\nexport default function artplayerPluginVttThumbnail(option) {\n return async (art) => {\n const {\n constructor: {\n utils: { setStyle, clamp },\n },\n template: { $progress },\n events: { proxy },\n } = art;\n\n const vttArray = await getVttArray(option.vtt);\n\n function getPosFromEvent(art, event) {\n const { $progress } = art.template;\n const { left } = $progress.getBoundingClientRect();\n const width = clamp(event.pageX - left, 0, $progress.clientWidth);\n const second = (width / $progress.clientWidth) * art.duration;\n return { width, second };\n }\n\n art.controls.add({\n name: 'thumbnails',\n position: 'top',\n index: 20,\n style: option.style || {},\n mounted($control) {\n proxy($progress, 'mousemove', async (event) => {\n setStyle($control, 'display', 'block');\n const { second, width } = getPosFromEvent(art, event);\n const find = vttArray.find((item) => second >= item.start && second <= item.end);\n if (!find) return setStyle($control, 'display', 'none');\n\n setStyle($control, 'backgroundImage', `url(${find.url})`);\n setStyle($control, 'height', `${find.h}px`);\n setStyle($control, 'width', `${find.w}px`);\n setStyle($control, 'backgroundPosition', `-${find.x}px -${find.y}px`);\n\n if (width <= find.w / 2) {\n setStyle($control, 'left', 0);\n } else if (width > $progress.clientWidth - find.w / 2) {\n setStyle($control, 'left', `${$progress.clientWidth - find.w}px`);\n } else {\n setStyle($control, 'left', `${width - find.w / 2}px`);\n }\n });\n\n proxy($progress, 'mouseleave', () => {\n setStyle($control, 'display', 'none');\n });\n\n art.on('hover', (state) => {\n if (!state) {\n setStyle($control, 'display', 'none');\n }\n });\n },\n });\n\n return {\n name: 'artplayerPluginVttThumbnail',\n };\n };\n}\n\nartplayerPluginVttThumbnail.env = process.env.NODE_ENV;\nartplayerPluginVttThumbnail.version = process.env.APP_VER;\nartplayerPluginVttThumbnail.build = process.env.BUILD_DATE;\n\nif (typeof window !== 'undefined') {\n window['artplayerPluginVttThumbnail'] = artplayerPluginVttThumbnail;\n}\n","function padEnd(str, targetLength, padString) {\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return String(str) + padString.slice(0, targetLength);\n }\n}\n\nfunction t2d(time) {\n var arr = time.split('.');\n var left = arr[0].split(':') || [];\n var right = padEnd(arr[1] || '0', 3, '0');\n var ms = Number(right) / 1000;\n\n var h = Number(left[left.length - 3] || 0) * 3600;\n var m = Number(left[left.length - 2] || 0) * 60;\n var s = Number(left[left.length - 1] || 0);\n return h + m + s + ms;\n}\n\nexport default async function getVttArray(vttUrl = '') {\n const vttString = await (await fetch(vttUrl)).text();\n const lines = vttString.split(/[\\n\\r]/gm).filter((item) => item.trim());\n const vttArray = [];\n\n for (let i = 1; i < lines.length; i += 2) {\n const time = lines[i];\n const text = lines[i + 1];\n\n if (!text.trim()) continue;\n\n const timeReg =\n /((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)(?: ?--> ?)((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)/;\n const timeMatch = time.match(timeReg);\n\n const textReg = /(.*)#(\\w{4})=(.*)/i;\n const textMatch = text.match(textReg);\n\n const start = Math.floor(t2d(timeMatch[1]));\n const end = Math.floor(t2d(timeMatch[2]));\n\n const urlArr = vttUrl.split('/');\n urlArr.pop();\n urlArr.push(textMatch[1]);\n const url = urlArr.join('/');\n\n const result = { start, end, url };\n\n const keys = textMatch[2].split('');\n const values = textMatch[3].split(',');\n\n for (let j = 0; j < keys.length; j++) {\n result[keys[j]] = values[j];\n }\n\n vttArray.push(result);\n }\n\n return vttArray;\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file +{"mappings":"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","sources":["Desktop/github/ArtPlayer/packages/artplayer-plugin-vtt-thumbnail/src/index.js","Desktop/github/ArtPlayer/packages/artplayer-plugin-vtt-thumbnail/src/getVttArray.js","Desktop/github/ArtPlayer/node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["import getVttArray from './getVttArray';\n\nexport default function artplayerPluginVttThumbnail(option) {\n return async (art) => {\n const {\n constructor: {\n utils: { setStyle, isMobile },\n },\n template: { $progress },\n } = art;\n\n let timer = null;\n const thumbnails = await getVttArray(option.vtt);\n\n function showThumbnails($control, find, width) {\n setStyle($control, 'backgroundImage', `url(${find.url})`);\n setStyle($control, 'height', `${find.h}px`);\n setStyle($control, 'width', `${find.w}px`);\n setStyle($control, 'backgroundPosition', `-${find.x}px -${find.y}px`);\n if (width <= find.w / 2) {\n setStyle($control, 'left', 0);\n } else if (width > $progress.clientWidth - find.w / 2) {\n setStyle($control, 'left', `${$progress.clientWidth - find.w}px`);\n } else {\n setStyle($control, 'left', `${width - find.w / 2}px`);\n }\n }\n\n art.controls.add({\n name: 'thumbnails',\n position: 'top',\n index: 20,\n style: option.style || {},\n mounted($control) {\n art.on('setBar', async (type, percentage, event) => {\n const isMobileDroging = type === 'played' && event && isMobile;\n\n if (type === 'hover' || isMobileDroging) {\n const width = $progress.clientWidth * percentage;\n const second = percentage * art.duration;\n setStyle($control, 'display', 'flex');\n\n const find = thumbnails.find((item) => second >= item.start && second <= item.end);\n if (!find) return setStyle($control, 'display', 'none');\n\n if (width > 0 && width < $progress.clientWidth) {\n showThumbnails($control, find, width);\n } else {\n if (!isMobile) {\n setStyle($control, 'display', 'none');\n }\n }\n\n if (isMobileDroging) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n setStyle($control, 'display', 'none');\n }, 500);\n }\n }\n });\n },\n });\n\n return {\n name: 'artplayerPluginVttThumbnail',\n };\n };\n}\n\nif (typeof window !== 'undefined') {\n window['artplayerPluginVttThumbnail'] = artplayerPluginVttThumbnail;\n}\n","function padEnd(str, targetLength, padString) {\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return String(str) + padString.slice(0, targetLength);\n }\n}\n\nfunction t2d(time) {\n var arr = time.split('.');\n var left = arr[0].split(':') || [];\n var right = padEnd(arr[1] || '0', 3, '0');\n var ms = Number(right) / 1000;\n\n var h = Number(left[left.length - 3] || 0) * 3600;\n var m = Number(left[left.length - 2] || 0) * 60;\n var s = Number(left[left.length - 1] || 0);\n return h + m + s + ms;\n}\n\nexport default async function getVttArray(vttUrl = '') {\n const vttString = await (await fetch(vttUrl)).text();\n const lines = vttString.split(/[\\n\\r]/gm).filter((item) => item.trim());\n const vttArray = [];\n\n for (let i = 1; i < lines.length; i += 2) {\n const time = lines[i];\n const text = lines[i + 1];\n\n if (!text.trim()) continue;\n\n const timeReg =\n /((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)(?: ?--> ?)((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)/;\n const timeMatch = time.match(timeReg);\n\n const textReg = /(.*)#(\\w{4})=(.*)/i;\n const textMatch = text.match(textReg);\n\n const start = Math.floor(t2d(timeMatch[1]));\n const end = Math.floor(t2d(timeMatch[2]));\n\n let url = textMatch[1];\n const isAbsoluteUrl = /^\\/|((https?|ftp|file):\\/\\/)/i.test(url);\n if (!isAbsoluteUrl) {\n const urlArr = vttUrl.split('/');\n urlArr.pop();\n urlArr.push(url);\n url = urlArr.join('/');\n }\n\n const result = { start, end, url };\n\n const keys = textMatch[2].split('');\n const values = textMatch[3].split(',');\n\n for (let j = 0; j < keys.length; j++) {\n result[keys[j]] = values[j];\n }\n\n vttArray.push(result);\n }\n\n return vttArray;\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../../../../"} \ No newline at end of file diff --git a/docs/uncompiled/artplayer-tool-thumbnail/index.js b/docs/uncompiled/artplayer-tool-thumbnail/index.js index 1b36c93ae..6684aaf39 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail/index.js +++ b/docs/uncompiled/artplayer-tool-thumbnail/index.js @@ -142,7 +142,7 @@ this[globalName] = mainExports; } } -})({"gEVO5":[function(require,module,exports) { +})({"1uFaH":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); var _emitter = require("./emitter"); @@ -182,7 +182,7 @@ class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { } setup(option = {}) { this.option = Object.assign({}, this.option, option); - const { fileInput , number , width , column } = this.option; + const { fileInput, number, width, column } = this.option; this.errorHandle(fileInput instanceof Element, "The 'fileInput' is not a Element"); if (!(fileInput.tagName === "INPUT" && fileInput.type === "file")) { fileInput.style.position = "relative"; @@ -242,7 +242,7 @@ class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { } start() { if (!this.video.duration) return (0, _utils.sleep)(1000).then(()=>this.start()); - const { width , number , begin , end } = this.option; + const { width, number, begin, end } = this.option; const height = this.video.videoHeight / this.video.videoWidth * width; this.option.height = height; this.option.begin = (0, _utils.clamp)(begin, 0, this.video.duration); @@ -283,7 +283,7 @@ class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { }); } creatScreenshotDate() { - const { number , width , height , column , begin } = this.option; + const { number, width, height, column, begin } = this.option; const timeGap = this.duration / number; const timePoints = [ begin + timeGap @@ -299,7 +299,7 @@ class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { })); } creatCanvas() { - const { number , width , height , column } = this.option; + const { number, width, height, column } = this.option; const canvas = document.createElement("canvas"); const context2D = canvas.getContext("2d"); canvas.width = width * column; @@ -343,7 +343,7 @@ class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { exports.default = ArtplayerToolThumbnail; window["ArtplayerToolThumbnail"] = ArtplayerToolThumbnail; -},{"./emitter":"2ZQK0","./utils":"5vF3n","@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}],"2ZQK0":[function(require,module,exports) { +},{"./emitter":"lQHUa","./utils":"kMfwO","@parcel/transformer-js/src/esmodule-helpers.js":"kBreb"}],"lQHUa":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); class Emitter { @@ -383,7 +383,7 @@ class Emitter { } exports.default = Emitter; -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}],"8MjWm":[function(require,module,exports) { +},{"@parcel/transformer-js/src/esmodule-helpers.js":"kBreb"}],"kBreb":[function(require,module,exports) { exports.interopDefault = function(a) { return a && a.__esModule ? a : { default: a @@ -396,7 +396,7 @@ exports.defineInteropFlag = function(a) { }; exports.exportAll = function(source, dest) { Object.keys(source).forEach(function(key) { - if (key === "default" || key === "__esModule" || dest.hasOwnProperty(key)) return; + if (key === "default" || key === "__esModule" || Object.prototype.hasOwnProperty.call(dest, key)) return; Object.defineProperty(dest, key, { enumerable: true, get: function() { @@ -413,7 +413,7 @@ exports.export = function(dest, destName, get) { }); }; -},{}],"5vF3n":[function(require,module,exports) { +},{}],"kMfwO":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); parcelHelpers.export(exports, "sleep", ()=>sleep); @@ -435,6 +435,6 @@ function clamp(num, a, b) { return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); } -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}]},["gEVO5"], "gEVO5", "parcelRequire7b4c") +},{"@parcel/transformer-js/src/esmodule-helpers.js":"kBreb"}]},["1uFaH"], "1uFaH", "parcelRequire94c2") //# sourceMappingURL=index.js.map diff --git a/docs/uncompiled/artplayer-tool-thumbnail/index.js.map b/docs/uncompiled/artplayer-tool-thumbnail/index.js.map index 89b7be28d..9f6a57737 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail/index.js.map +++ b/docs/uncompiled/artplayer-tool-thumbnail/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.js","src/emitter.js","../../node_modules/@parcel/transformer-js/src/esmodule-helpers.js","src/utils.js"],"sourcesContent":["import Emitter from './emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nexport default class ArtplayerToolThumbnail extends Emitter {\n constructor(option = {}) {\n super();\n this.processing = false;\n this.option = {};\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));\n this.video = ArtplayerToolThumbnail.creatVideo();\n this.duration = 0;\n this.inputChange = this.inputChange.bind(this);\n this.ondrop = this.ondrop.bind(this);\n this.option.fileInput.addEventListener('change', this.inputChange);\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop);\n }\n\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: NaN,\n };\n }\n\n static ondragover(event) {\n event.preventDefault();\n }\n\n ondrop(event) {\n event.preventDefault();\n const file = event.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, number, width, column } = this.option;\n\n this.errorHandle(fileInput instanceof Element, \"The 'fileInput' is not a Element\");\n\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative';\n const newFileInput = document.createElement('input');\n newFileInput.type = 'file';\n newFileInput.style.position = 'absolute';\n newFileInput.style.width = '100%';\n newFileInput.style.height = '100%';\n newFileInput.style.left = '0';\n newFileInput.style.top = '0';\n newFileInput.style.right = '0';\n newFileInput.style.bottom = '0';\n newFileInput.style.opacity = '0';\n fileInput.appendChild(newFileInput);\n this.option.fileInput = newFileInput;\n }\n\n ['number', 'width', 'column', 'begin', 'end'].forEach((item) => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.column = clamp(column, 1, 1000);\n return this;\n }\n\n static creatVideo() {\n const video = document.createElement('video');\n video.style.position = 'absolute';\n video.style.top = '-9999px';\n video.style.left = '-9999px';\n video.muted = true;\n video.controls = true;\n document.body.appendChild(video);\n return video;\n }\n\n inputChange(event) {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n event.target.value = '';\n }\n\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type);\n this.errorHandle(\n canPlayType === 'maybe' || canPlayType === 'probably',\n `Playback of this file format is not supported: ${file.type}`,\n );\n const videoUrl = URL.createObjectURL(file);\n this.videoUrl = videoUrl;\n this.file = file;\n this.emit('file', this.file);\n this.video.src = videoUrl;\n this.emit('video', this.video);\n }\n }\n\n start() {\n if (!this.video.duration) return sleep(1000).then(() => this.start());\n const { width, number, begin, end } = this.option;\n const height = (this.video.videoHeight / this.video.videoWidth) * width;\n this.option.height = height;\n this.option.begin = clamp(begin, 0, this.video.duration);\n this.option.end = clamp(end || this.video.duration, begin, this.video.duration);\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);\n this.duration = this.option.end - this.option.begin;\n this.density = number / this.duration;\n this.errorHandle(this.file && this.video, 'Please select the video file first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`);\n const screenshotDate = this.creatScreenshotDate();\n const canvas = this.creatCanvas();\n const context2D = canvas.getContext('2d');\n this.emit('canvas', canvas);\n const promiseList = screenshotDate.map((item, index) => () => {\n return new Promise((resolve) => {\n this.video.oncanplay = () => {\n context2D.drawImage(this.video, item.x, item.y, width, height);\n canvas.toBlob((blob) => {\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.thumbnailUrl = URL.createObjectURL(blob);\n this.emit('update', this.thumbnailUrl, (index + 1) / number);\n this.video.oncanplay = null;\n resolve();\n });\n };\n this.video.currentTime = item.time;\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() => {\n this.processing = false;\n this.emit('done');\n })\n .catch((err) => {\n this.processing = false;\n this.emit('error', err.message);\n throw err;\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option;\n const timeGap = this.duration / number;\n const timePoints = [begin + timeGap];\n while (timePoints.length < number) {\n const last = timePoints[timePoints.length - 1];\n timePoints.push(last + timeGap);\n }\n return timePoints.map((item, index) => ({\n time: item - timeGap / 2,\n x: (index % column) * width,\n y: Math.floor(index / column) * height,\n }));\n }\n\n creatCanvas() {\n const { number, width, height, column } = this.option;\n const canvas = document.createElement('canvas');\n const context2D = canvas.getContext('2d');\n canvas.width = width * column;\n canvas.height = Math.ceil(number / column) * height + 30;\n context2D.fillStyle = 'black';\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n context2D.font = '14px Georgia';\n context2D.fillStyle = '#fff';\n context2D.fillText(\n `From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`,\n 10,\n canvas.height - 11,\n );\n return canvas;\n }\n\n download() {\n this.errorHandle(\n this.file && this.thumbnailUrl,\n 'Download does not seem to be ready, please create preview first',\n );\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n const elink = document.createElement('a');\n const name = `${getFileName(this.file.name)}.png`;\n elink.download = name;\n elink.href = this.thumbnailUrl;\n document.body.appendChild(elink);\n elink.click();\n document.body.removeChild(elink);\n this.emit('download', name);\n return this;\n }\n\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg);\n throw new Error(msg);\n }\n }\n\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange);\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop);\n document.body.removeChild(this.video);\n if (this.videoUrl) {\n URL.revokeObjectURL(this.videoUrl);\n }\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.emit('destroy');\n }\n}\n\nwindow['ArtplayerToolThumbnail'] = ArtplayerToolThumbnail;\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({ fn, ctx });\n return this;\n }\n\n once(name, fn, ctx) {\n const self = this;\n function listener(...args) {\n self.off(name, listener);\n fn.apply(ctx, args);\n }\n listener._ = fn;\n return this.on(name, listener, ctx);\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n return this;\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {});\n const evts = e[name];\n const liveEvents = [];\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents;\n } else {\n delete e[name];\n }\n return this;\n }\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","export function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function runPromisesInSeries(ps) {\n return ps.reduce((p, next) => p.then(next), Promise.resolve());\n}\n\nexport function getFileName(name) {\n const nameArray = name.split('.');\n nameArray.pop();\n return nameArray.join('.');\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../packages/artplayer-tool-thumbnail/"} \ No newline at end of file +{"mappings":"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","sources":["Desktop/github/ArtPlayer/packages/artplayer-tool-thumbnail/src/index.js","Desktop/github/ArtPlayer/packages/artplayer-tool-thumbnail/src/emitter.js","Desktop/github/ArtPlayer/node_modules/@parcel/transformer-js/src/esmodule-helpers.js","Desktop/github/ArtPlayer/packages/artplayer-tool-thumbnail/src/utils.js"],"sourcesContent":["import Emitter from './emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nexport default class ArtplayerToolThumbnail extends Emitter {\n constructor(option = {}) {\n super();\n this.processing = false;\n this.option = {};\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));\n this.video = ArtplayerToolThumbnail.creatVideo();\n this.duration = 0;\n this.inputChange = this.inputChange.bind(this);\n this.ondrop = this.ondrop.bind(this);\n this.option.fileInput.addEventListener('change', this.inputChange);\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop);\n }\n\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: NaN,\n };\n }\n\n static ondragover(event) {\n event.preventDefault();\n }\n\n ondrop(event) {\n event.preventDefault();\n const file = event.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, number, width, column } = this.option;\n\n this.errorHandle(fileInput instanceof Element, \"The 'fileInput' is not a Element\");\n\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative';\n const newFileInput = document.createElement('input');\n newFileInput.type = 'file';\n newFileInput.style.position = 'absolute';\n newFileInput.style.width = '100%';\n newFileInput.style.height = '100%';\n newFileInput.style.left = '0';\n newFileInput.style.top = '0';\n newFileInput.style.right = '0';\n newFileInput.style.bottom = '0';\n newFileInput.style.opacity = '0';\n fileInput.appendChild(newFileInput);\n this.option.fileInput = newFileInput;\n }\n\n ['number', 'width', 'column', 'begin', 'end'].forEach((item) => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.column = clamp(column, 1, 1000);\n return this;\n }\n\n static creatVideo() {\n const video = document.createElement('video');\n video.style.position = 'absolute';\n video.style.top = '-9999px';\n video.style.left = '-9999px';\n video.muted = true;\n video.controls = true;\n document.body.appendChild(video);\n return video;\n }\n\n inputChange(event) {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n event.target.value = '';\n }\n\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type);\n this.errorHandle(\n canPlayType === 'maybe' || canPlayType === 'probably',\n `Playback of this file format is not supported: ${file.type}`,\n );\n const videoUrl = URL.createObjectURL(file);\n this.videoUrl = videoUrl;\n this.file = file;\n this.emit('file', this.file);\n this.video.src = videoUrl;\n this.emit('video', this.video);\n }\n }\n\n start() {\n if (!this.video.duration) return sleep(1000).then(() => this.start());\n const { width, number, begin, end } = this.option;\n const height = (this.video.videoHeight / this.video.videoWidth) * width;\n this.option.height = height;\n this.option.begin = clamp(begin, 0, this.video.duration);\n this.option.end = clamp(end || this.video.duration, begin, this.video.duration);\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);\n this.duration = this.option.end - this.option.begin;\n this.density = number / this.duration;\n this.errorHandle(this.file && this.video, 'Please select the video file first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`);\n const screenshotDate = this.creatScreenshotDate();\n const canvas = this.creatCanvas();\n const context2D = canvas.getContext('2d');\n this.emit('canvas', canvas);\n const promiseList = screenshotDate.map((item, index) => () => {\n return new Promise((resolve) => {\n this.video.oncanplay = () => {\n context2D.drawImage(this.video, item.x, item.y, width, height);\n canvas.toBlob((blob) => {\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.thumbnailUrl = URL.createObjectURL(blob);\n this.emit('update', this.thumbnailUrl, (index + 1) / number);\n this.video.oncanplay = null;\n resolve();\n });\n };\n this.video.currentTime = item.time;\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() => {\n this.processing = false;\n this.emit('done');\n })\n .catch((err) => {\n this.processing = false;\n this.emit('error', err.message);\n throw err;\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option;\n const timeGap = this.duration / number;\n const timePoints = [begin + timeGap];\n while (timePoints.length < number) {\n const last = timePoints[timePoints.length - 1];\n timePoints.push(last + timeGap);\n }\n return timePoints.map((item, index) => ({\n time: item - timeGap / 2,\n x: (index % column) * width,\n y: Math.floor(index / column) * height,\n }));\n }\n\n creatCanvas() {\n const { number, width, height, column } = this.option;\n const canvas = document.createElement('canvas');\n const context2D = canvas.getContext('2d');\n canvas.width = width * column;\n canvas.height = Math.ceil(number / column) * height + 30;\n context2D.fillStyle = 'black';\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n context2D.font = '14px Georgia';\n context2D.fillStyle = '#fff';\n context2D.fillText(\n `From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`,\n 10,\n canvas.height - 11,\n );\n return canvas;\n }\n\n download() {\n this.errorHandle(\n this.file && this.thumbnailUrl,\n 'Download does not seem to be ready, please create preview first',\n );\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n const elink = document.createElement('a');\n const name = `${getFileName(this.file.name)}.png`;\n elink.download = name;\n elink.href = this.thumbnailUrl;\n document.body.appendChild(elink);\n elink.click();\n document.body.removeChild(elink);\n this.emit('download', name);\n return this;\n }\n\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg);\n throw new Error(msg);\n }\n }\n\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange);\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop);\n document.body.removeChild(this.video);\n if (this.videoUrl) {\n URL.revokeObjectURL(this.videoUrl);\n }\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.emit('destroy');\n }\n}\n\nwindow['ArtplayerToolThumbnail'] = ArtplayerToolThumbnail;\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({ fn, ctx });\n return this;\n }\n\n once(name, fn, ctx) {\n const self = this;\n function listener(...args) {\n self.off(name, listener);\n fn.apply(ctx, args);\n }\n listener._ = fn;\n return this.on(name, listener, ctx);\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n return this;\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {});\n const evts = e[name];\n const liveEvents = [];\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents;\n } else {\n delete e[name];\n }\n return this;\n }\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","export function sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function runPromisesInSeries(ps) {\n return ps.reduce((p, next) => p.then(next), Promise.resolve());\n}\n\nexport function getFileName(name) {\n const nameArray = name.split('.');\n nameArray.pop();\n return nameArray.join('.');\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../../../../"} \ No newline at end of file diff --git a/packages/artplayer-plugin-vtt-thumbnail/package.json b/packages/artplayer-plugin-vtt-thumbnail/package.json index a2b42f080..d47bcb61e 100644 --- a/packages/artplayer-plugin-vtt-thumbnail/package.json +++ b/packages/artplayer-plugin-vtt-thumbnail/package.json @@ -1,6 +1,6 @@ { "license": "MIT", - "version": "1.0.0", + "version": "1.0.1", "name": "artplayer-plugin-vtt-thumbnail", "types": "types/artplayer-plugin-vtt-thumbnail.d.ts", "description": "vtt thumbnail plugin for ArtPlayer", @@ -21,4 +21,4 @@ "video", "player" ] -} +} \ No newline at end of file diff --git a/packages/artplayer-plugin-vtt-thumbnail/src/index.js b/packages/artplayer-plugin-vtt-thumbnail/src/index.js index 2fba298fb..e367df478 100644 --- a/packages/artplayer-plugin-vtt-thumbnail/src/index.js +++ b/packages/artplayer-plugin-vtt-thumbnail/src/index.js @@ -4,20 +4,26 @@ export default function artplayerPluginVttThumbnail(option) { return async (art) => { const { constructor: { - utils: { setStyle, clamp }, + utils: { setStyle, isMobile }, }, template: { $progress }, - events: { proxy }, } = art; - const vttArray = await getVttArray(option.vtt); + let timer = null; + const thumbnails = await getVttArray(option.vtt); - function getPosFromEvent(art, event) { - const { $progress } = art.template; - const { left } = $progress.getBoundingClientRect(); - const width = clamp(event.pageX - left, 0, $progress.clientWidth); - const second = (width / $progress.clientWidth) * art.duration; - return { width, second }; + function showThumbnails($control, find, width) { + setStyle($control, 'backgroundImage', `url(${find.url})`); + setStyle($control, 'height', `${find.h}px`); + setStyle($control, 'width', `${find.w}px`); + setStyle($control, 'backgroundPosition', `-${find.x}px -${find.y}px`); + if (width <= find.w / 2) { + setStyle($control, 'left', 0); + } else if (width > $progress.clientWidth - find.w / 2) { + setStyle($control, 'left', `${$progress.clientWidth - find.w}px`); + } else { + setStyle($control, 'left', `${width - find.w / 2}px`); + } } art.controls.add({ @@ -26,33 +32,31 @@ export default function artplayerPluginVttThumbnail(option) { index: 20, style: option.style || {}, mounted($control) { - proxy($progress, 'mousemove', async (event) => { - setStyle($control, 'display', 'block'); - const { second, width } = getPosFromEvent(art, event); - const find = vttArray.find((item) => second >= item.start && second <= item.end); - if (!find) return setStyle($control, 'display', 'none'); + art.on('setBar', async (type, percentage, event) => { + const isMobileDroging = type === 'played' && event && isMobile; - setStyle($control, 'backgroundImage', `url(${find.url})`); - setStyle($control, 'height', `${find.h}px`); - setStyle($control, 'width', `${find.w}px`); - setStyle($control, 'backgroundPosition', `-${find.x}px -${find.y}px`); + if (type === 'hover' || isMobileDroging) { + const width = $progress.clientWidth * percentage; + const second = percentage * art.duration; + setStyle($control, 'display', 'flex'); - if (width <= find.w / 2) { - setStyle($control, 'left', 0); - } else if (width > $progress.clientWidth - find.w / 2) { - setStyle($control, 'left', `${$progress.clientWidth - find.w}px`); - } else { - setStyle($control, 'left', `${width - find.w / 2}px`); - } - }); + const find = thumbnails.find((item) => second >= item.start && second <= item.end); + if (!find) return setStyle($control, 'display', 'none'); - proxy($progress, 'mouseleave', () => { - setStyle($control, 'display', 'none'); - }); + if (width > 0 && width < $progress.clientWidth) { + showThumbnails($control, find, width); + } else { + if (!isMobile) { + setStyle($control, 'display', 'none'); + } + } - art.on('hover', (state) => { - if (!state) { - setStyle($control, 'display', 'none'); + if (isMobileDroging) { + clearTimeout(timer); + timer = setTimeout(() => { + setStyle($control, 'display', 'none'); + }, 500); + } } }); }, diff --git a/scripts/build.js b/scripts/build.js index 370b462fc..060139f60 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -111,7 +111,6 @@ async function runBuild() { choices: Object.keys(projects).map((name) => ({ title: name, value: name, - description: projects[name], })), initial: 0, }); diff --git a/scripts/dev.js b/scripts/dev.js index eef57879a..2dae85f93 100644 --- a/scripts/dev.js +++ b/scripts/dev.js @@ -85,7 +85,6 @@ async function develop(name) { choices: Object.keys(projects).map((name) => ({ title: name, value: name, - description: projects[name], })), initial: 0, }); diff --git a/scripts/utils.js b/scripts/utils.js index 4dbd7c1c4..428704269 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -16,6 +16,7 @@ export function formatDate(date) { export function getProjects() { return glob .sync('packages/*') + .sort() .filter((item) => !item.endsWith('artplayer-template') && !item.endsWith('artplayer-vitepress')) .reduce((result, item) => { const name = item.split(/\/|\\/g).pop();