mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-22 21:31:20 -08:00
Optimize setBar event and fix chapter display in artplayer-plugin-chapter
This commit is contained in:
1 parent
bc5761ecdb
commit
5edf5af672
3 files changed
+83
-30
No files matched your search
@@ -24,20 +24,59 @@ export default function artplayerPluginChapter(option = {}) {
|
||||
const $title = append($inner, '<div class="art-chapter-title"></div>');
|
||||
|
||||
function showTitle({ $chapter, width }) {
|
||||
$title.innerText = $chapter.dataset.title || '';
|
||||
const titleWidth = $title.clientWidth;
|
||||
if (width <= titleWidth / 2) {
|
||||
setStyle($title, 'left', 0);
|
||||
} else if (width > $inner.clientWidth - titleWidth / 2) {
|
||||
setStyle($title, 'left', `${$inner.clientWidth - titleWidth}px`);
|
||||
const title = $chapter.dataset.title.trim();
|
||||
if (title) {
|
||||
setStyle($title, 'display', 'flex');
|
||||
$title.innerText = title;
|
||||
const titleWidth = $title.clientWidth;
|
||||
if (width <= titleWidth / 2) {
|
||||
setStyle($title, 'left', 0);
|
||||
} else if (width > $inner.clientWidth - titleWidth / 2) {
|
||||
setStyle($title, 'left', `${$inner.clientWidth - titleWidth}px`);
|
||||
} else {
|
||||
setStyle($title, 'left', `${width - titleWidth / 2}px`);
|
||||
}
|
||||
} else {
|
||||
setStyle($title, 'left', `${width - titleWidth / 2}px`);
|
||||
setStyle($title, 'display', 'none');
|
||||
}
|
||||
}
|
||||
|
||||
function update(chapters = []) {
|
||||
if (!chapters.length) return;
|
||||
if (!art.duration) return;
|
||||
$control.innerText = '';
|
||||
|
||||
for (let i = 0; i < chapters.length; i++) {
|
||||
const chapter = chapters[i];
|
||||
const nextChapter = chapters[i + 1];
|
||||
|
||||
if (chapter.start < 0 || chapter.end > art.duration || chapter.start >= chapter.end) {
|
||||
throw new Error('Illegal chapter time point');
|
||||
}
|
||||
|
||||
if (nextChapter && chapter.end > nextChapter.start) {
|
||||
throw new Error('Illegal chapter time point');
|
||||
}
|
||||
}
|
||||
|
||||
if (chapters[0].start > 0) {
|
||||
chapters.unshift({ start: 0, end: chapters[0].start, title: '' });
|
||||
}
|
||||
|
||||
if (chapters[chapters.length - 1].end < art.duration) {
|
||||
chapters.push({ start: chapters[chapters.length - 1].end, end: art.duration, title: '' });
|
||||
}
|
||||
|
||||
for (let i = 0; i < chapters.length - 1; i++) {
|
||||
if (chapters[i].end !== chapters[i + 1].start) {
|
||||
chapters.splice(i + 1, 0, {
|
||||
start: chapters[i].end,
|
||||
end: chapters[i + 1].start,
|
||||
title: '',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$chapters = chapters.map((chapter) => {
|
||||
const $chapter = append($control, html);
|
||||
const start = clamp(chapter.start, 0, art.duration);
|
||||
@@ -102,7 +141,6 @@ export default function artplayerPluginChapter(option = {}) {
|
||||
if (isMobile) {
|
||||
if (type === 'played' && event) {
|
||||
showTitle({ $chapter, width });
|
||||
setStyle($title, 'display', 'flex');
|
||||
clearTimeout(titleTimer);
|
||||
titleTimer = setTimeout(() => {
|
||||
setStyle($title, 'display', 'none');
|
||||
@@ -118,11 +156,6 @@ export default function artplayerPluginChapter(option = {}) {
|
||||
});
|
||||
|
||||
if (!isMobile) {
|
||||
art.proxy($progress, 'mousemove', () => {
|
||||
if (!$chapters.length) return;
|
||||
setStyle($title, 'display', 'flex');
|
||||
});
|
||||
|
||||
art.proxy($progress, 'mouseleave', () => {
|
||||
if (!$chapters.length) return;
|
||||
setStyle($title, 'display', 'none');
|
||||
|
||||
Reference in new issue
Block a user