использование jquery + <audio>w / php / mysql для циклического воспроизведения - PullRequest
0 голосов
/ 01 марта 2012

У меня есть страница с iframe. В iframe используется jquery.scrollTo для определения времени воспроизведения звука и сохранения содержания, например текста песни, в правильной точке аудио.

Каждая строка текста извлекается из таблицы MySQL. Я пытаюсь разрешить пользователю щелкнуть строку в <iframe> и воспроизвести звук на родительской странице в этот момент. Вот код, который захватывает время, которое существует после 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 } ?>

Эта вторая часть циклически повторяется один раз для каждой потенциальной строки в фрейме, по которой можно щелкнуть. #button_in_iframe<?php echo $segment;?> заканчивается как что-то вроде #button_in_iframe23 для 23-й строки.

Я загрузил jquery как в родительский, так и в iframe. Насколько я могу судить, синтаксис такой, каким он должен быть. Если я удаляю этот бит кода, все работает нормально. если он там, основные звуковые функции на обычных элементах управления, которые я установил, перестают работать. Так что это не только не работает, но и приводит к тому, что все остальное, связанное с элементами управления аудиотега, также перестает работать. Я знаю, что любой маленькой ошибки в jquery управления звуком достаточно, чтобы он перестал работать, но в этом случае я не уверен, в чем проблема.

Заранее благодарим за любые идеи, которые кто-либо может предложить.

Обновление: У меня так, что больше не вылетает звуковая метка. Теперь проблема заключается в том, что элемент iframe не вызывает событие. Вот код сейчас:

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

Я не получаю никаких ошибок консоли, за исключением Google Maps, встроенных в страницу в другом месте. Когда я нажимаю <button> с классом loop2 в iframe, все из которых существуют, ничего не происходит. Кажется, это корень проблемы, как это было раньше.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Я разобрался, как это сделать.Я установил цикл для родительского элемента следующим образом:

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

Затем на странице iframe я сказал каждой кнопке вызывать parent.play<?php echo $segment;?>();

Я неконечно, почему поиск тегов в iframe не сработал, но неважно.На этом все сделано.

Спасибо, Шанабус, за все предложения.

0 голосов
/ 02 марта 2012

Будет ли работать использование медиа-сигналов?

Пример:

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();
    }

Или, может быть, разделить вашу логику на две петли. Один для создания сигналов, затем один для создания / привязки событий щелчка.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...