EDIT:今ではSafariで動作します。オーディオはユーザーイベント(例:onclick ..)によってトリガーされなければならないようですので、ボタンを追加して、タイプライターをonclickから開始させました。
PS:オーディオファイルをプリロードする方法がないという欠点があります。Safariはサーバーリクエストを行い、再生するたびにオーディオをダウンロードします。私はこれを克服するために考えることができる唯一の(汚い)の方法ではなくaudioURLのデータURIを提供することです..あなたは、再生速度が本当に重要ならばという試すことができます(これは参考にすることができ:https://www.ibm.com/developerworks/library/wa-ioshtml5/)
// The delay between each keystroke
var delay = 300;
// The typewriter sound file url
var clickURL = "https://cdn.rawgit.com/halimb/res/6ffa798d/typewriter.wav";
// Get a reference to the container div
var container = document.getElementById("container");
var sampleString = "Hello world!";
//get a reference to the start button and typewrite onclick
var start = document.getElementById("btn");
start.onclick = function() { typewrite(sampleString); };
function typewrite(str) {
var i = 0;
container.innerHTML = "";
type();
function type() {
var click = new Audio(clickURL);
// This is triggered when the browser has enough of the file to play through
click.oncanplaythrough = function() {
click.play();
// Add the character to the container div
container.innerHTML += str[i];
i++;
if(i < str.length) {
window.setTimeout(type, delay);
}
}
}
}
* {
\t font-family: Courier;
\t font-size: 32px;
}
.btn {
\t display: inline-block;
\t border: 1px solid black;
\t border-radius: 5px;
\t padding: 10px;
\t cursor: pointer;
\t margin: 10px;
}
<div class="btn" id="btn">Start</div>
<div id="container"></div>
あなたがしようとしていることについて少し考えてみてください。問題を解決し、各部分をインターネットで検索して実装してください。問題がある場合は、ここで質問してください。このような幅広い質問をするには、SOが最適な場所ではありません。 – Kroltan