HTMLMediaElementï¼play() æ¹æ³
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
HTMLMediaElement.play() æ¹æ³ä¼å°è¯ææ¾åªä½ãè¿ä¸ªæ¹æ³è¿åä¸ä¸ª Promiseï¼å½åªä½æåå¼å§ææ¾æ¶è¢«è§£å³ï¼resolvedï¼ã彿æ¾å 为任ä½åå 失败æ¶ï¼è¿ä¸ª promise 被æç»ï¼rejectedï¼ã
è¯æ³
play()
åæ°
æ
è¿åå¼
ä¸ä¸ª Promiseï¼å½åªä½æåå¼å§ææ¾æ¶è¢«è§£å³ï¼å½ææ¾å 为任ä½åå 失败æ¶å被被æç»ã
夿³¨ï¼æ§çæ¬çæµè§å¨å¯è½ä¸ä¼ä» play() è¿åå¼ã
å¼å¸¸
å½ promise æ¥æ¶å°ä¸ä¸ªå¼å¸¸åç§°ä½ä¸ºå ¶å¯ä¸è¾å ¥åæ°æ¶ï¼ç¸å¯¹äºä¼ ç»çå¼å¸¸æåºï¼ï¼promise çæç»å¤çç¨åºä¼è¢«è°ç¨ãå¯è½çå¼å¸¸å¦ä¸ï¼
NotAllowedError-
ç¨æ·ä»£çï¼æµè§å¨ï¼ææä½ç³»ç»å¨å½åä¸ä¸ææå½åæ å¢ä¸ä¸å 许åªä½ææ¾ãä¾å¦ï¼è¿ä¼åç卿µè§å¨è¦æ±ç¨æ·æ¾å¼æä¸ææ¾æé®æææ¾åªä½æ¶ã
NotSupportedError-
åªä½æºï¼å¯è½æ¯
MediaStreamãMediaSourceãBlobæFileçï¼ä¸æ¯ä¸ä¸ªæ¯æçåªä½æ ¼å¼ã
ä¹å¯è½æ¥åå ¶ä»å¼å¸¸ï¼åå³äºæµè§å¨çå®ç°ç»èï¼åªä½ææ¾å¨çå®ç°ççã
使ç¨è¯´æ
è½ç¶âautoplayâè¿ä¸ªè¯å¸¸å¸¸è¢«ç¨äºæè¿°å½åªä½å è½½å®ææ¶ç«å³å¼å§ææ¾ï¼æµè§å¨çèªå¨ææ¾çç¥å
¶å®ä¹åºç¨äºèæ¬é©±å¨çåªä½ææ¾ï¼å
æ¬è°ç¨ play()ã
妿 user agent 被设置为ä¸å
许èªå¨æèæ¬é©±å¨çåªä½ææ¾ï¼è°ç¨ play() ä¼å¯¼è´è¿åç promise 被ç«å³ä»¥ NotAllowedError æç»ãç½é¡µåºè¯¥å¯¹è¿ç§æ
åµå好åå¤ã举个ä¾åï¼ä¸ä¸ªç½é¡µä¸åºè¯¥å宿æ¾å·²ç»èªå¨å¼å§èç´æ¥å±ç¤ºç¸åºçç¨æ·çé¢ï¼èåºè¯¥å¨è¿åç promise è¢«è§£å³ææç»ååæ´æ°ç¨æ·çé¢ãæ´å¤ä¿¡æ¯åè§ ç¤ºä¾ã
夿³¨ï¼play() æ¹æ³å¯è½ä¼è®©ç¨æ·è¢«è¯¢é®æ¯å¦ç»äºææ¾åªä½çæéï¼è¿å¯è½ä¼ä½¿è¿åç promise å»¶è¿è§£å³ãä½ åºè¯¥ç¡®ä¿ä½ ç代ç ä¸éè¦å³æ¶ååºã
å ³äºèªå¨ææ¾åç¦æ¢èªå¨ææ¾çæ´å¤æ·±åº¦å 容ï¼åè§æä»¬çæç« Autoplay guide for media and Web Audio APIsã
示ä¾
è¿ä¸ªä¾åå±ç¤ºäºå¦ä½ç¡®è®¤ææ¾å·²ç»å¼å§ä»¥åå¦ä½ä¼é å°å¤çèªå¨ææ¾è¢«ç¦æ¢ï¼
let videoElem = document.getElementById("video");
let playButton = document.getElementById("playbutton");
playButton.addEventListener("click", handlePlayButton, false);
playVideo();
async function playVideo() {
try {
await videoElem.play();
playButton.classList.add("playing");
} catch (err) {
playButton.classList.remove("playing");
}
}
function handlePlayButton() {
if (videoElem.paused) {
playVideo();
} else {
videoElem.pause();
playButton.classList.remove("playing");
}
}
å¨è¿ä¸ªä¾åä¸ï¼è§é¢çææ¾ç± async playVideo() 彿°æ§å¶ã彿°å°è¯ææ¾è§é¢ï¼å¦æææ¾æåï¼å° playButton å
ç´ çç±»å称设为 "playing"ãå¦æææ¾å¤±è´¥ï¼å»é¤ playButton å
ç´ çç±»åç§°ï¼æ¢å¤å
¶åæ¥çæ ·å¼ãéè¿çè§ play() è¿åç Promise æ¯è¢«è§£å³è¿æ¯è¢«æç»ä»¥ä¿è¯ææ¾æé®çå¤è§ä¸å®é
çææ¾ç¶æç¸å¹é
ã
ä¸è¿°ä»£ç å¼å§æ§è¡æ¶ï¼å
è·å <video> å
ç´ åç¨äºåæ¢ææ¾ãæåç <button> å
ç´ çå¼ç¨ãå¨åæ¢æé®ä¸æ·»å click äºä»¶çå¤çç¨åºãæåè°ç¨ playVideo() å°è¯èªå¨å¼å§ææ¾ã
ä½ å¯ä»¥å¨ è¿é æ¥çæä¿®æ¹è¿ä¸ªä¾åã
è§è
| è§è |
|---|
| HTML > # dom-media-play-dev > |
夿³¨ï¼WHATWG çæ¬å W3C çæ¬çè§èä¸ä¸æ ·ï¼2016 å¹´ 4 æ 20 æ¥ï¼ï¼ä¸ä¸ªè¿å Promiseï¼ä¸ä¸ªä¸è¿åã