Skip to content

Commit 61c9ade

Browse files
authored
fix: working autoplay in mobile (#652)
* fix: autoplay works on player for mobile devices
1 parent 3774ae8 commit 61c9ade

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

src/blocks/Header/Header.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ $backgroundWidth: 1440px;
2424
height: 100%;
2525

2626
&_theme_dark {
27+
--g-color-line-focus: var(--pc-color-line-focus-dark);
28+
2729
#{$block}__title,
2830
#{$block}__overtitle {
2931
color: var(--g-color-text-light-primary);

src/components/Media/Video/Video.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ const Video = (props: VideoAllProps) => {
9191

9292
return (
9393
<ReactPlayerBlock
94+
ref={ref}
9495
className={b('react-player', videoClassName)}
9596
src={src}
9697
previewImgUrl={previewImg}

src/components/ReactPlayer/ReactPlayer.tsx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ interface PlayerPropgress {
6262
played: number;
6363
}
6464

65+
type ReactPlayerBlockRefType = ReactPlayerBlockHandler | undefined;
6566
// eslint-disable-next-line react/display-name
66-
export const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactPlayerBlockProps>(
67+
export const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockRefType, ReactPlayerBlockProps>(
6768
(props, originRef) => {
6869
const isMobile = useContext(MobileContext);
6970
const {metrika} = useContext(MetrikaContext);
@@ -130,9 +131,25 @@ export const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactP
130131
}, [analyticsEvents]);
131132
const handleAnalytics = useAnalytics(DefaultEventNames.ReactPlayerControls);
132133

133-
useImperativeHandle(originRef, () => ({
134-
pause: () => setIsPlaying(false),
135-
}));
134+
useImperativeHandle(
135+
originRef,
136+
() => {
137+
if (!playerRef) {
138+
return;
139+
}
140+
141+
const videoInstance = playerRef.getInternalPlayer() as HTMLVideoElement;
142+
const {play, pause, addEventListener} = videoInstance;
143+
144+
// eslint-disable-next-line consistent-return
145+
return {
146+
play: play.bind(videoInstance),
147+
pause: pause.bind(videoInstance),
148+
addEventListener: addEventListener.bind(videoInstance),
149+
};
150+
},
151+
[playerRef],
152+
);
136153

137154
useEffect(() => {
138155
if (ref.current && !playingVideoRef?.contains(ref.current)) {

src/models/components.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
export type ArrowDirection = 'left' | 'right';
22

3-
export interface ReactPlayerBlockHandler {
4-
pause: () => void;
5-
}
3+
export interface ReactPlayerBlockHandler
4+
extends Pick<HTMLVideoElement, 'play' | 'pause' | 'addEventListener'> {}

0 commit comments

Comments
 (0)