feat: release v0.0.1
This commit is contained in:
46
dist/react/video-player/components/with-mouse-events/index.js
vendored
Normal file
46
dist/react/video-player/components/with-mouse-events/index.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
import { jsx as _jsx } from "react/jsx-runtime";
|
||||
import React, { useCallback, useRef, useState } from "react";
|
||||
import styles from "./with-mouse-events.module.scss";
|
||||
export const WithMouseEvents = ({ children, onMouseEnter, onMouseLeave, onClick, onReady, ...props }) => {
|
||||
const [player, setPlayer] = useState(null);
|
||||
const mouseHoverTimeoutRef = useRef(null); // Реф для хранения таймера
|
||||
const isHoveredRef = useRef(false); // Реф для отслеживания состояния наведения
|
||||
const handlePlayer = useCallback((player) => {
|
||||
setPlayer(player);
|
||||
onReady && onReady(player);
|
||||
}, []);
|
||||
// Обработчик клика на область видео
|
||||
const handleClick = useCallback((e) => {
|
||||
if (onClick) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
onClick(player);
|
||||
}
|
||||
}, [onClick, player]);
|
||||
// Обработчик наведения на видео
|
||||
const handleMouseEnter = useCallback(() => {
|
||||
// Устанавливаем флаг, что мышь наведена
|
||||
isHoveredRef.current = true;
|
||||
// Запускаем таймер на 1 секунды
|
||||
mouseHoverTimeoutRef.current = setTimeout(() => {
|
||||
// Проверяем, что курсор все еще находится на видео
|
||||
if (isHoveredRef.current) {
|
||||
onMouseEnter && onMouseEnter(player);
|
||||
}
|
||||
}, 1);
|
||||
}, [onMouseEnter, player]);
|
||||
// Обработчик убирания курсора с видео
|
||||
const handleMouseLeave = useCallback(() => {
|
||||
// Сбрасываем флаг, что мышь не наведена
|
||||
isHoveredRef.current = false;
|
||||
// Очищаем таймер, если курсор убран до его срабатывания
|
||||
if (mouseHoverTimeoutRef.current) {
|
||||
clearTimeout(mouseHoverTimeoutRef.current);
|
||||
mouseHoverTimeoutRef.current = null;
|
||||
}
|
||||
// Останавливаем видео, если оно было запущено
|
||||
onMouseLeave && onMouseLeave(player);
|
||||
}, [onMouseLeave, player]);
|
||||
return (_jsx("div", { className: styles.videoArea, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onClick: handleClick, children: React.cloneElement(children, { ...props, onReady: handlePlayer }) }));
|
||||
};
|
||||
//# sourceMappingURL=index.js.map
|
||||
Reference in New Issue
Block a user