Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Несколько flash плееров на одной странице (http://www.flasher.ru/forum/showthread.php?t=134399)

GSA85 29.12.2009 12:20

Несколько flash плееров на одной странице
 
Искал по форуму но толком ничего не нашел...
На странице несколько flash плееров (один и тот же swf), играющих разные треки.
Как сделать так, чтобы при нажатии на play одного из них остальные останавливались?

Можно как то через js, но я его плохо знаю...

mooncar 29.12.2009 12:47

Используйте класс ExternalInterface. Знания JS там нужно совсем чуть-чуть, примеры EI + JS есть в хелпе. Я так вообще почти не знаю JS, примеров из хелпа оказалось вполне достаточно.

Итак, разбейте задачу:
1) Сначала научитесь просто останавливать воспроизведение плеера со HTML-страницы: пусть у вас JS функция, повешенная на HTML-кнопку, будет останавливать воспроизведение с помощью флешкиного кода. В коде для этого будет использоваться метод ExternalInterface.addCallback.
2) Когда этого удастся добиться во второй флешке, настроите другой метод, ExternalInterface.call, который будет "дергать" эту функцию JS из другой флешки.
3) Ну и когда и с этим справитесь, нужно использовать оба метода в каждом из плееров.

Задача не так сложна, как вы думаете. JS нужен лишь только для нахождения объекта с флешкой на странице и сообщения флешке, какую ее внутреннюю функцию нужно вызвать.

zurkis 29.12.2009 13:39

http://flash-ripper.com/articles/fla...-interface.php

GSA85 29.12.2009 13:58

но разве так не остановятся сразу оба плеера?

mooncar 29.12.2009 14:34

При вызове JS-функции передавайте параметром те, которые требуются остановить.
Или вызывайте функцию циклом и передавайте в цикле каждый раз параметр того, которого требутеся остановить (т.е. цикл вызова по всем номерам, кроме своего).
Класс дает возможность передачи параметров, это очень здорово.

GSA85 29.12.2009 14:54

спасибо!

GSA85 15.01.2010 03:01

никак не могу передать параметр нужной флешке...
как только не пытался...
На странице 5 флешек, естественно у каждой свой id.
Уже весь мозг сломал... Как передать нужной флешке параметры?
Это не работает:
Код:

function sendFromJS(num) {
movie = "Movie_" + num;
var value = "0";
getMovie(movie).sendFromJS(value);
}

function getMovie(MovieName) {
var M$ = navigator.appName.indexOf("Microsoft")!=-1
return (M$ ? window : document)[MovieName]
}


Hauts 15.01.2010 05:20

Попробуйте запускать страницу не локально.

У вас addCallback() прописан?

Кстати, есть другие варанты, как остановить плееры.

Например, при загрузке, плеер пробует коннектиться к localConnection_1. Если такого нет, то сам создает localConnection_1 и присваивает себе connection_id=1. Второй плеер точно так же действует, но, если localConnection_1 уже занято, создает localConnection_2 и устанавливает себе connection_id=2 и так далее. Когда нужно остановить все плееры, то в цикле от одного до ста (например) пробегаем соединения, запуская стоп-функцию и пропуская одно соединение, под номером, равным своему connection_id. Решение весьма грубое и не универсальное, имеет задержку в выполнении (было бы интересно сравнить с решением через ExternalInterface + JavaScript) и ограничение по количеству одновременно запущенных плееров.

Если ExternalInterface.available = false, то можно пробовать такой метод.

mooncar, что скажете?

aristotle 28.01.2010 22:00

GSA85, на самом деле проблема в том, что когда вы вызываете из JS функцию AS, функция AS еще не создалась. Я пока что нашел один выход: вызывать через интервал. В вашем случае четвертую строку заменить на:
Код AS3:

setTimeout(function(){getMovie(movie).sendFromJS(value),1000);



Часовой пояс GMT +4, время: 23:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.