在 safri 里面明確指出等待用戶的交互動作后才能播放 media,也就是說如果你沒有得到用戶的 action 就播放的話就會被 safri 攔截,所以我們要用一些事件來控制
touchstart 事件:當(dāng)手指觸摸屏幕時(shí)候觸發(fā),即使已經(jīng)有一個(gè)手指放在屏幕上也會觸發(fā)。
touchmove 事件:當(dāng)手指在屏幕上滑動的時(shí)候連續(xù)地觸發(fā)。在這個(gè)事件發(fā)生期間,調(diào)用 preventDefault() 事件可以阻止?jié)L動。
touchend 事件:當(dāng)手指從屏幕上離開的時(shí)候觸發(fā)。
touchcancel 事件:當(dāng)系統(tǒng)停止跟蹤觸摸的時(shí)候觸發(fā)。關(guān)于這個(gè)事件的確切出發(fā)時(shí)間,文檔中并沒有具體說明,咱們只能去猜測了。
先要去監(jiān)聽 touchstart 事件,當(dāng)用戶觸摸屏幕的時(shí)候去執(zhí)行 playAudio 方法,同時(shí)監(jiān)聽播放事件,播放的時(shí)候移除 touchstart 的監(jiān)聽。
var audio = document.getElementById("audio");
window.addEventListener('touchstart', playAudio, false);
audio.addEventListener('play', function () {
window.removeEventListener('touchstart', playAudio, false);
}, false);
function playAudio() {
if (audio.paused) {
audio.load();
audio.play();
} else {
audio.pause();
}
}