1

「listOfWords」の各単語に異なるサウンドを割り当てようとしていますが、生成されたサウンドクリップを再生して単語の1つをランダムに印刷することに関して、ここからどこに行くべきかわかりません..

var listOfWords = {
    "mat": "http://www.wav-sounds.com/cartoon/daffyduck1.wav",
    "cat": "http://www.wav-sounds.com/cartoon/hankhill1.wav",
    "dog": "http://www.wav-sounds.com/cartoon/bugsbunny1.wav",
    "pit": "http://www.wav-sounds.com/cartoon/familyguy2.wav",
    "pot": "http://www.wav-sounds.com/cartoon/porkypig1.wav"
}​

ここに、これまでに試したランダム生成があります..

var shuffledWords = listOfWords.slice(0).sort(function() {
return 0.5 - Math.random();
}).slice(0, 1);
4

4 に答える 4

1

各単語に必要なサウンドで解決し、完璧に機能します。

見てください:

http://jsfiddle.net/oscarj24/7kbNe/

于 2012-07-23T15:27:56.757 に答える
1

I guess you already understood what everyone said. Object can't use method from array, so you need another way to random their attributes. Found one on Pick random property from a Javascript object

Then, select a random key and its value. Print the key, play the sound.

// function to pick random property from object 
// from https://stackoverflow.com/questions/2532218/pick-random-property-from-a-javascript-object
function pickRandomProperty(obj) {
    var keys = [];
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            keys.push(prop);
        }
    }
    return keys[Math.floor(keys.length * Math.random())];
}

var listOfWords = {
    "mat": "http://www.wav-sounds.com/cartoon/daffyduck1.wav",
    "cat": "http://www.wav-sounds.com/cartoon/hankhill1.wav",
    "dog": "http://www.wav-sounds.com/cartoon/bugsbunny1.wav",
    "pit": "http://www.wav-sounds.com/cartoon/familyguy2.wav",
    "pot": "http://www.wav-sounds.com/cartoon/porkypig1.wav"
};

var shuffledWords = pickRandomProperty(listOfWords), 
    shuffledSound = new Audio(listOfWords[shuffledWords]);

// "write" the word (ugly way)
document.write(shuffledWords);
// play the sound
shuffledSound.play();
于 2012-07-23T15:32:05.547 に答える
1

sliceおよびsortは配列のメソッドです。あなたが持っているのはですobject

そのオブジェクトのランダムなプロパティを取得したい場合は、ループを使用する必要があります。

var listOfWords = {
    "mat": "http://www.wav-sounds.com/cartoon/daffyduck1.wav",
    "cat": "http://www.wav-sounds.com/cartoon/hankhill1.wav",
    "dog": "http://www.wav-sounds.com/cartoon/bugsbunny1.wav",
    "pit": "http://www.wav-sounds.com/cartoon/familyguy2.wav",
    "pot": "http://www.wav-sounds.com/cartoon/porkypig1.wav"
};

var randomInt = Math.floor(Math.random() * (listOfWords.length + 1));
var chosenSound;

for (var prop in listOfWords) {
    if (randomInt === 0) {
        chosenSound = listOfWords[prop];
        break;
    }

    randomInt--;
}

オブジェクトを反復処理する場合、順序が常に保証されるわけではありませんが、とにかくランダムに選択しているため、実際には問題にならないことに注意してください。

于 2012-07-23T15:20:25.250 に答える
0

これは HTML5 ソリューションです。IE9 は wav ファイルを再生しないと言われています。さらに、wav-sounds.com の一部の wav ファイルは、デコード エラーをスローします (FF14 で)。サンプルでは、​​異なるサウンド URL を使用しました。ランダムな選択を容易にするために、これは listOfWords を配列の配列として宣言します。それが役に立てば幸い。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript">

        var listOfWords = [
            ["mat","http://www.wav-sounds.com/various/applause.wav"],
            ["cat", "http://www.wav-sounds.com/various/bomb.wav"],
            ["dog", "http://www.wav-sounds.com/various/bark.wav"],
            ["pit", "http://www.wav-sounds.com/various/beep.wav"],
            ["pot", "http://www.wav-sounds.com/various/cashtill.wav"]
         ];

        function playRandom() {
            var wordWavUrl = listOfWords[Math.floor(listOfWords.length * Math.random())];
            var word = wordWavUrl[0];
            var url = wordWavUrl[1];
            document.getElementById("wordDisplay").innerHTML=word;
            document.getElementById("audioPlay").src=url;
            document.getElementById("audioPlay").autoplay="autoplay";
        }
    </script>
</head>
<body>
    <div id="wordDisplay"></div>
    <button onclick="playRandom();">play random</button>
    <audio id="audioPlay">
    </audio>
</body>
</html>
于 2012-07-23T16:18:41.157 に答える