Wen*_*Liu 6 javascript html5 html5-video
只是一个简单的问题。
我想HTMLMediaElement为变量分配一个方法。
// html part
<video id="player" ... />
// js part
const video = document.querySelector('#player')
const play = video.play
video.play() // works!
play() // error!
Uncaught (in promise) TypeError: Failed to execute 'play' on 'HTMLMediaElement': Illegal invocation
Run Code Online (Sandbox Code Playgroud)
有人知道为什么会发生此错误吗?
的DOM原生实现HTMLMediaElement.play需要this绑定到HTMLMediaElement。
video.play()之所以有效,this是因为该值绑定到video。
play()不起作用,因为该this值现在绑定到其他东西(也许是window?)。
您可以使用以下方法调用它:
const video = document.querySelector('#video');
play = video.play;
play.call(video);Run Code Online (Sandbox Code Playgroud)
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>Run Code Online (Sandbox Code Playgroud)
或使用bind“保存以备后用”:
const video = document.querySelector('#video');
play = video.play.bind(video);
play();Run Code Online (Sandbox Code Playgroud)
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |