teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプルコードの追加

2019/07/23 08:55

投稿

og24715
og24715

スコア832

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
+ ```