2012-03-01 46 views
0

我有一個iframe的頁面。 iframe正在使用jquery.scrollTo來檢測音頻播放時間,並將內容(例如歌詞)鏈接到音頻中的正確點。使用jquery + <audio> w/php/mysql循環播放時間

每行文本都從mysql表中拉出來。我想要做的是讓用戶點擊中的一行,並讓父頁面中的音頻播放。下面是抓住時間來處理其它音頻功能了jQuery之後存在的代碼,:

<?php 
include 'mysqlt.php'; 
$entries=mysql_query("SELECT * FROM `database`.`table`") or die(mysql_error()); 
while ($ent = mysql_fetch_object($entries)) { 
$segment = $ent->index; 
$starttime = $ent->time; 
$nextline = $ent->time2; 
$length = ($nextline - $starttime); ?> 

這相同的信息也被複制在iframe源頁的歌詞的各條線一起。使用這個信息了jQuery如下:

$("#iframe_id").contents().find("#button_in_iframe<?php echo $segment;?>").bind("click", function(){ 
     audioplayer.currentTime = <?php echo $time;?>; 
     audioplayer.play(); 
    } 
<?php } ?> 

這第二部分的環路,在iframe每個每個潛在的直線,可以點擊呼應一次。 #button_in_iframe<?php echo $segment;?>結果爲第23行的#button_in_iframe23

我有jquery加載在父和iframe中。據我所知,語法就是它應該是的。如果我刪除這段代碼,一切正常。如果它在那裏,我設置的正常控制的基本音頻功能停止工作。所以這不僅不起作用,還會導致與音頻標籤控件相關的所有其他內容也停止工作。我知道音頻控件的jquery中的任何小錯誤都足以使其停止工作,但在這種情況下,我不確定問題出在哪裏。

預先感謝任何見解任何人可以提供。

更新: 我知道了,所以它不再崩潰的音頻標籤。現在,更多的問題是iframe的項目沒有觸發事件。這裏是代碼現在:

$('#iframe_id').contents().find("button.loop2").bind("click", function() { 
    alert ("test"); 
    }); 

我沒有得到任何控制檯錯誤,除了谷歌地圖嵌入在另一個位置的頁面。當我點擊<button>與iframe中的類loop2,所有這些都存在,什麼也沒有發生。這似乎是問題的根源,因爲它較早。

+0

這件作品的輸出是什麼樣的? 'currentTime = <?php echo $ time; ?>;'你也得到一個控制檯錯誤? – shanabus 2012-03-01 14:18:56

+0

當前時間以0.0,6.7,13.2等數字結尾u – Yhilan 2012-03-02 02:35:43

+0

您得到了什麼錯誤? – shanabus 2012-03-02 02:39:04

回答

1

我想出瞭如何去做。我設置父環路,內容如下:

play<?php echo $segment; ?> = function(){ 
     sfx.currentTime = sounds.getCueById(id).startTime; 
     sfx.play(); 
    }; 
在iframe的頁面

然後,我已經告訴每個按鈕來調用parent.play<?php echo $segment;?>();

我不知道爲什麼找不到標記iframe不起作用,但不管。這完成了工作。

謝謝,shanabus,所有的建議。

0

它會使用媒體線索嗎?

例子:

var sfx = new Audio('sfx.wav'); 
var sounds = a.addTextTrack('metadata'); 

// add sounds we care about 
sounds.addCue(new TextTrackCue('dog bark', 12.783, 13.612, '', '', '', true)); 
sounds.addCue(new TextTrackCue('kitten mew', 13.612, 15.091, '', '', '', true)); 

function playSound(id) { 
    sfx.currentTime = sounds.getCueById(id).startTime; 
    sfx.play(); 
} 

你可以找到規範一半時這裏的頁面更好的定義 - http://dev.w3.org/html5/spec/Overview.html

所以你的情況,也許是這樣的:

$("#iframe_id").contents().find("#button_in_iframe<?php echo $segment;?>").bind("click", function(){ 
     sounds.addCue(new TextTrackCue('<?php echo $segment; ?>', <?php echo $starttime; ?>, <?php echo ($starttime + $length); ?>, '', '', '', true)); 
     var id = '<?php echo $segment; ?>'; 
     sfx.currentTime = sounds.getCueById(id).startTime; 
     sfx.play(); 
    } 

或者也許將你的邏輯分成兩個循環。一個用於構建線索,另一個用於構建/綁定點擊事件。

希望這會有所幫助!

+0

謝謝。這可能是我最終想做的事情。儘管爲了工作,「alert(」test「)'也需要工作,現在它不是。它看起來像現在的問題是,iframe的按鈕/鏈接/ etc不會觸發父級中的jquery事件。 – Yhilan 2012-03-02 03:02:26