Переключение между экземплярами NiftyPlayer на странице - не прекратится воспроизведение при скрытии в IE - PullRequest
0 голосов
/ 30 ноября 2009

У меня есть страница со ссылками на MP3, когда я нажимаю на ссылку, я использую javascript, чтобы показать маленький Flash-плеер (NiftyPlayer) под этой ссылкой. При нажатии на другую ссылку старый игрок скрывается, а новый игрок открывается.

Плеер автоматически запускается при отображении элемента и автоматически останавливается при скрытии - в Firefox.

В IE это будет только автоматический запуск, а НЕ автоматический останов. Это то, что я хотел бы решить.

Это пример HTML со ссылкой и проигрывателем

<a href="Beat The Radar - Misunderstood What You Said.mp3" onclick="toggle_visibility('player662431');return false;" class="mp3caption">Misunderstood What You Said</a>

<div id="player662431" class="playerhide"><embed src="http://www.example.com/shop/flash/player.swf?file=/mp3/Beat The Radar - Misunderstood What You Said.mp3&as=1" quality="high" bgcolor="#000000" width="161" height="13" name="niftyPlayer662431" align="" type="application/x-shockwave-flash" swLiveConnect="true" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>

Вот javascript (у меня установлен jQuery, позволяющий скрывать все открытые проигрыватели на этой странице, кроме нового)

function toggle_visibility(id) {
 $('.playerhide').hide();
 var e = document.getElementById(id);
 e.style.display = 'block';
}

Я думаю, что мне нужно сделать, это запустить плеер вручную с помощью JavaScript (вместо использования функции автозапуска как = 1 в строке URL)

Существует некоторый javascript, который поставляется с NiftyPlayer для разрешения этого EG

niftyplayer('niftyPlayer1').play()

есть также метод остановки.

Мне нужна помощь с javascript - как мне добавить этот вызов для воспроизведения в моей функции toggle_visibility (к имени игрока добавлен тот же уникальный идентификационный номер, что и идентификатор отображаемого div, но я не не знаю, как вытащить этот идентификационный номер из одной вещи и вставить его в другую)

Я также хотел бы иметь возможность сделать

niftyplayer('niftyPlayer1').stop()

, чтобы остановить звук ранее запущенного плеера. Можно ли где-нибудь сохранить текущий идентификационный номер и при необходимости перезвонить?

Спасибо за помощь, я программист PHP, которому нужна поддержка Javascript - я знаю, чего хочу достичь, просто не знаю команд для этого!

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 января 2010

У меня есть намного лучшее решение после того, как я заметил очень неприятную ошибку / «функцию» при использовании Internet Explorer в сочетании.

Я заметил, что в IE загрузка страниц занимала очень много времени, когда у меня было много скрытых проигрывателей Nifty, я посмотрел ближе с помощью Fiddler и обнаружил, что каждый экземпляр NiftyPlayer полностью загружает MP3, а не загрузка по требованию, как с Firefox и Chrome и т. д.

Это означало, что для загрузки страницы из 100 элементов (каждый из которых содержал до 4 файлов MP3) требовалось несколько минут для загрузки с очевидными последствиями передачи данных.

Мое решение, которое является более простым (но, возможно, более грубым), чем в Indyber, состоит в том, чтобы просто использовать

function toggle_visibility(id,mp3location) {
    // hide all players
    $(".playerarea").html('');

    // show clicked player
    $('#' + id).html('<embed src=\"http://www.xxx.com/shop/flash/player.swf?file=http://www.xxx.com/mp3/' + decodeURIComponent(mp3location) + '.mp3&as=1\" quality=high bgcolor=#000000 WMODE=transparent width=\"161\" height=\"13\"  align=\"\" type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" class=\"playerNew\">');


}

, который отлично работает с IE, а также решает проблему невозможности помешать игрокам играть в IE

0 голосов
/ 01 декабря 2009

Если вы назначили каждому объекту niftyplayer имя класса, f.x. «.players», тогда вы можете перебрать каждого игрока, как здесь:

function toggle_visibility(id) {

    $(".players").each(function(){

        playerId = $(this).attr('id');

        if(niftyplayer(playerId).getState() == 'playing') {

            //Stop the currently playing player
            niftyplayer(playerId).stop();

            //Hide the div that was playing
            $("#" + playerId).hide();

        }

    });

    //Start the new player
    niftyplayer(id).play();
    $("#" + id).show();        

}

Итак, что это на самом деле делает, так это проходит по всем игрокам на сайте. Он проверяет, равен ли статус каждого игрока «игре», если это так, то останавливает его и скрывает теги div. Затем он запускает нового игрока и показывает этот тег div.

Я думаю, что это делает это. Попробуйте.

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