0

私が現在取り組んでいるプロジェクトでは、このような曲を再生する機能を手動で追加する必要があります

function song(){
    mySong.src="song1.mp3";
    mySong.play();
    document.getElementById("p2").innerHTML="Now Playing:Song1";
}

しかし、php でディレクトリを検索し、それらの関数を php から生成できるようにしたいので、各曲を手動で追加する必要はありません。これは私のテストコードです。間違っていたことはわかっていますが、正しく理解できないようです!

<?php
Header("content-type: application/x-javascript");
if ($handle = opendir('/wamp/www/songs/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo 'function $entry(){mySong.src=$entry; mySong.play();       
            document.getElementById("p2").innerHTML="Now Playing:" $entry;}';
            echo "$entry";
        }
    }
    closedir($handle);
}
?>
4

2 に答える 2

2

曲のソースのパラメーターを使用して、ページでJS関数を定義します。

function song(entry){
    mySong.src=entry;
    mySong.play();
    document.getElementById("p2").innerHTML="Now Playing: " + entry;
}

PHPでは、リンクをエコーし​​て、そのフォルダー内の各曲を再生することをお勧めします。
これを行う:

<?php
//Header("content-type: application/x-javascript");
if ($handle = opendir('/wamp/www/songs/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo '<a href="javascript:void(0)" onclick="song(\'' . $entry . '\')">' . $entry . '</a><br />';
        }
    }
    closedir($handle);
}
?>

これにより、ファイルのパス名が拡張子付きで表示されることに注意してください。表示を改善するには、php /js substr/substringおよびexplode/を使用して文字列を操作する必要がありますsplit

了解しました。指定された例で機能するようにコードを書き直しました。

JS(頭)

function song(entry){
    var mySong=document.getElementById("song1");
    mySong.src=entry;
    mySong.play();
    document.getElementById("p2").innerHTML="Now Playing: " + entry;
}

PHP + HTML(本文)

<?php
//Header("content-type: application/x-javascript");
$path = '/wamp/www/songs/';
if ($handle = opendir($path)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo '<a href="javascript:void(0)" onclick="song(\'' . $path . $entry . '\')">' . $entry . '</a><br />';
        }
    }
    closedir($handle);
}
?>
<p id="p2"></p>
<audio id="song1" controls="controls">
    <source src="" type="audio/mpeg" />
</audio>

これは、HTML5をサポートするブラウザで再生されるmp3ファイルで機能します。

<audio>Firefoxはタグ内の.mp3再生をサポートしていないことに注意してください。Firefoxが<audio>のMP3ファイル形式をサポートしていない理由を参照してください。

したがって、このソリューション(を使用<audio>)は、Chromeでのみ満足のいく結果をもたらします(オペラとサファリではテストされていません)。互換性を高めるために、別のソリューションにフォールバックすることをお勧めします。

IEおよびFirefoxとの互換性が必要な場合は、<embed>:を使用してみてください。

JS

function song(entry){
    var mySong=document.createElement('embed');
    mySong.src=entry;
    mySong.width='250px';
    mySong.height='60px';
    document.getElementById("song1").innerHTML= '';
    document.getElementById("song1").appendChild(mySong);
    document.getElementById("p2").innerHTML="Now Playing: " + entry;
}

PHP + HTML

<?php
//Header("content-type: application/x-javascript");
$path = '/wamp/www/songs/';
if ($handle = opendir($path)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo '<a href="javascript:void(0)" onclick="song(\'' . $path . $entry . '\')">' . $entry . '</a><br />';
        }
    }
    closedir($handle);
}
?>
<p id="p2"></p>
<div id="song1"></div>

これは事実上クロスブラウザになりますが、Firefoxのプラグインのインストールを要求する場合があります。

于 2012-05-27T19:42:51.683 に答える
1

あなたの見積もりに問題があります。一重引用符は変数を解析しません。また、間違った場所にいくつかの引用符があります。

<?php
Header("content-type: application/x-javascript");
if ($handle = opendir('/wamp/www/songs/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
          echo "function $entry(){mySong.src='$entry';mySong.play();document.getElementById('p2').innerHTML='Now Playing: $entry';}";
        }
    }
    closedir($handle);
}
?>

しかし、これには別の問題があります...あなたの曲はおそらく適切な関数名に準拠していません...この「曲ごとの関数」のことを再考する必要があります...

于 2012-05-27T19:38:17.953 に答える