diff --git a/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.module.css b/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.module.css index 01c46c22..e5e1a0f9 100644 --- a/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.module.css +++ b/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.module.css @@ -151,23 +151,6 @@ text-align: center; transform: translateX(-50%); } -.progressBarChapter.hover .label { - display: block; - font-size: 11px; - text-wrap: nowrap; - white-space: nowrap; - position: absolute; - overflow: hidden; - text-overflow: ellipsis; - background-color: rgba(0,0,0,.8); - border-radius: 5px; - padding: 10px; - top: -50px; - left: 50%; - width: auto; - text-align: center; - transform: translateX(-50%); -} .volumeBar { position: absolute; diff --git a/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.tsx b/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.tsx index f84cea70..a273f263 100644 --- a/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.tsx +++ b/Grayjay.Desktop.Web/src/components/player/PlayerControlsView/index.tsx @@ -54,7 +54,10 @@ const PlayerControlsView: Component = (props) => { let settingsButton: HTMLElement | undefined; let containerRef: HTMLDivElement | undefined; let scrubbing = false; + let seeking = false; let changingVolume = false; + const [mouseSeekPosition,setMouseSeekPosition]=createSignal(); + const [mouseSeekOffset,setMouseSeekOffset]=createSignal(0); const [progressBarChapterHovering$, setProgressBarChapterHovering] = createSignal(); @@ -82,11 +85,17 @@ const PlayerControlsView: Component = (props) => { }; const scrub = (e: MouseEvent) => { - if (scrubbing && progressBar) { + if (progressBar) { const d = untrack(progressBarDimensions); + setMouseSeekOffset(e.x-d.left); const positionFraction = (e.x - d.left) / d.width; - const scrubPosition = Duration.fromMillis(positionFraction * props.duration.as("milliseconds")); - props.onSetPosition?.(scrubPosition); + const p=Duration.fromMillis(positionFraction * props.duration.as("milliseconds")); + if(seeking){ + setMouseSeekPosition(p); + } + if(scrubbing){ + props.onSetPosition?.(p); + } props.onInteraction?.(); } }; @@ -123,6 +132,7 @@ const PlayerControlsView: Component = (props) => { }; const onMouseOut = (e: MouseEvent) => { + seeking=false; setMouseSeekPosition(undefined); stopScrubbing(e); stopChangingVolume(e); setProgressBarChapterHovering(-1); @@ -405,6 +415,22 @@ const PlayerControlsView: Component = (props) => {
+ +
+
{props.chapters? props.chapters[progressBarChapterHovering$()??0]?.name:""}
+
{mouseSeekPosition()?.toISOTime()}
+
+
0}>
{ (chapter$, i: number) => @@ -418,9 +444,6 @@ const PlayerControlsView: Component = (props) => { left: `calc(${(Math.max(1, chapter$().timeStart) / (props.duration.milliseconds / 1000)) * 100}% + 2px)`, width: `calc(${((Math.min((props.duration.milliseconds / 1000), chapter$().timeEnd - chapter$().timeStart)) / (props.duration.milliseconds / 1000)) * 100}% - 2px)`, }}> -
- {chapter$().name} -
= (props) => {
-
+
{seeking=true}}onMouseDown={startScrubbing} onMouseOut={onMouseOut} onMouseUp={stopScrubbing} onMouseMove={onMouseMove} />
playonPlay(ev)} />