Improve progress bar dragging detection
This commit is contained in:
@@ -71,6 +71,7 @@ const BaseReaderProgressBar = ({
|
|||||||
direction: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
direction: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
||||||
}) => {
|
}) => {
|
||||||
const progressBarRef = useRef<HTMLDivElement | null>(null);
|
const progressBarRef = useRef<HTMLDivElement | null>(null);
|
||||||
|
const draggingDetectionTimeout = useRef<NodeJS.Timeout>();
|
||||||
|
|
||||||
const [totalPagesTextWidth, setTotalPagesTextWidth] = useState(0);
|
const [totalPagesTextWidth, setTotalPagesTextWidth] = useState(0);
|
||||||
const totalPagesTextRef = useRef<HTMLSpanElement | null>(null);
|
const totalPagesTextRef = useRef<HTMLSpanElement | null>(null);
|
||||||
@@ -131,7 +132,10 @@ const BaseReaderProgressBar = ({
|
|||||||
<ReaderProgressBarSlotsActionArea
|
<ReaderProgressBarSlotsActionArea
|
||||||
{...slotProps?.progressBarSlotsActionArea}
|
{...slotProps?.progressBarSlotsActionArea}
|
||||||
ref={progressBarRef}
|
ref={progressBarRef}
|
||||||
onTouchEnd={() => setIsDragging(false)}
|
onTouchEnd={() => {
|
||||||
|
setIsDragging(false);
|
||||||
|
clearTimeout(draggingDetectionTimeout.current);
|
||||||
|
}}
|
||||||
onTouchStart={(event) => {
|
onTouchStart={(event) => {
|
||||||
if (!progressBarRef.current) {
|
if (!progressBarRef.current) {
|
||||||
return;
|
return;
|
||||||
@@ -150,9 +154,14 @@ const BaseReaderProgressBar = ({
|
|||||||
undefined,
|
undefined,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
setIsDragging(true);
|
|
||||||
|
clearTimeout(draggingDetectionTimeout.current);
|
||||||
|
draggingDetectionTimeout.current = setTimeout(() => setIsDragging(true), 250);
|
||||||
|
}}
|
||||||
|
onMouseUp={() => {
|
||||||
|
setIsDragging(false);
|
||||||
|
clearTimeout(draggingDetectionTimeout.current);
|
||||||
}}
|
}}
|
||||||
onMouseUp={() => setIsDragging(false)}
|
|
||||||
onMouseDown={(event) => {
|
onMouseDown={(event) => {
|
||||||
if (!progressBarRef.current) {
|
if (!progressBarRef.current) {
|
||||||
return;
|
return;
|
||||||
@@ -171,7 +180,9 @@ const BaseReaderProgressBar = ({
|
|||||||
undefined,
|
undefined,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
setIsDragging(true);
|
|
||||||
|
clearTimeout(draggingDetectionTimeout.current);
|
||||||
|
draggingDetectionTimeout.current = setTimeout(() => setIsDragging(true), 250);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ReaderProgressBarSlotsContainer {...slotProps?.progressBarSlotsContainer}>
|
<ReaderProgressBarSlotsContainer {...slotProps?.progressBarSlotsContainer}>
|
||||||
@@ -206,7 +217,6 @@ const BaseReaderProgressBar = ({
|
|||||||
currentPagesIndex={currentPage.pagesIndex}
|
currentPagesIndex={currentPage.pagesIndex}
|
||||||
pagesLength={pages.length}
|
pagesLength={pages.length}
|
||||||
isDragging={isDragging}
|
isDragging={isDragging}
|
||||||
setIsDragging={setIsDragging}
|
|
||||||
progressBarPosition={progressBarPosition}
|
progressBarPosition={progressBarPosition}
|
||||||
>
|
>
|
||||||
{slots?.progressBarCurrentPage}
|
{slots?.progressBarCurrentPage}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ export const ReaderProgressBarCurrentPageSlot = ({
|
|||||||
currentPagesIndex,
|
currentPagesIndex,
|
||||||
pagesLength,
|
pagesLength,
|
||||||
isDragging,
|
isDragging,
|
||||||
setIsDragging,
|
|
||||||
boxProps,
|
boxProps,
|
||||||
children,
|
children,
|
||||||
progressBarPosition,
|
progressBarPosition,
|
||||||
@@ -48,22 +47,6 @@ export const ReaderProgressBarCurrentPageSlot = ({
|
|||||||
}),
|
}),
|
||||||
...boxProps?.sx,
|
...boxProps?.sx,
|
||||||
}}
|
}}
|
||||||
onTouchEnd={(e) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
setIsDragging(false);
|
|
||||||
}}
|
|
||||||
onTouchStart={(e) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
setIsDragging(true);
|
|
||||||
}}
|
|
||||||
onMouseUp={(e) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
setIsDragging(false);
|
|
||||||
}}
|
|
||||||
onMouseDown={(e) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
setIsDragging(true);
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ export interface CurrentPageSlotProps extends Pick<IReaderSettings, 'progressBar
|
|||||||
currentPagesIndex: number;
|
currentPagesIndex: number;
|
||||||
pagesLength: number;
|
pagesLength: number;
|
||||||
isDragging: boolean;
|
isDragging: boolean;
|
||||||
setIsDragging: (isDragging: boolean) => void;
|
|
||||||
boxProps?: BoxProps;
|
boxProps?: BoxProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user