回答編集履歴
1
サンプルコードの追加
answer
CHANGED
@@ -2,4 +2,75 @@
|
|
2
2
|
これだけだと、シークバーを操作せずに任意の再生時間の範囲外まで再生されたときには対応できないので、再生中に常に発火するイベントがあるので(たしか `timeupdate` か `playing`)そちらでも同様の処理をすればよいです。
|
3
3
|
|
4
4
|
HTMLMediaElement: seeked event - Web APIs | MDN
|
5
|
-
[https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event)
|
5
|
+
[https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event)
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
React 使ってますけど試しに書いてみました。
|
10
|
+
React 使おうが使わまいが `handleTimeUpdate` でやってることは変わらないと思います。
|
11
|
+
|
12
|
+
[https://codepen.io/og24715/pen/ymeXeK?editors=0010](https://codepen.io/og24715/pen/ymeXeK?editors=0010)
|
13
|
+
|
14
|
+
```const videoUrl = 'https://sample-videos.com/video123/mp4/240/big_buck_bunny_240p_1mb.mp4';
|
15
|
+
|
16
|
+
const VideoPlayer = ({ a, b }) => {
|
17
|
+
const handleTimeUpdate = (e) => {
|
18
|
+
const time = e.target.currentTime;
|
19
|
+
if (b < time) {
|
20
|
+
e.target.pause();
|
21
|
+
e.target.currentTime = b;
|
22
|
+
} else if (time < a) {
|
23
|
+
e.target.pause();
|
24
|
+
e.target.currentTime = a;
|
25
|
+
}
|
26
|
+
};
|
27
|
+
|
28
|
+
return (
|
29
|
+
<video
|
30
|
+
src={videoUrl}
|
31
|
+
controls
|
32
|
+
onTimeUpdate={handleTimeUpdate} />
|
33
|
+
);
|
34
|
+
};
|
35
|
+
|
36
|
+
const App = () => {
|
37
|
+
const [a, setA] = React.useState(0);
|
38
|
+
const [b, setB] = React.useState(13);
|
39
|
+
|
40
|
+
const handleChangeA = (e) => setA(e.target.value);
|
41
|
+
const handleChangeB = (e) => setB(e.target.value);
|
42
|
+
|
43
|
+
return (
|
44
|
+
<div>
|
45
|
+
<VideoPlayer a={a} b={b} />
|
46
|
+
<form>
|
47
|
+
<p>
|
48
|
+
A
|
49
|
+
<input
|
50
|
+
type="range"
|
51
|
+
value={a}
|
52
|
+
min={0}
|
53
|
+
max={13}
|
54
|
+
onChange={handleChangeA} />
|
55
|
+
{a}
|
56
|
+
</p>
|
57
|
+
<p>
|
58
|
+
B
|
59
|
+
<input
|
60
|
+
type="range"
|
61
|
+
value={b}
|
62
|
+
min={0}
|
63
|
+
max={13}
|
64
|
+
onChange={handleChangeB} />
|
65
|
+
{b}
|
66
|
+
</p>
|
67
|
+
</form>
|
68
|
+
</div>
|
69
|
+
);
|
70
|
+
}
|
71
|
+
|
72
|
+
ReactDOM.render(
|
73
|
+
<App />,
|
74
|
+
document.querySelector('#root'),
|
75
|
+
);
|
76
|
+
```
|