Создание обработчика событий по нажатию мыши.
Для того, чтобы наши кнопки были действительно рабочими, нам необходимо добавить обработчик событий. Теперь нашим главным помощником будет язык Action Script. Но перед тем как добавлять сам код, мы должны каждой кнопке присвоить свое уникальное имя, к которому мы будем в последствии обращаться. Для того, чтобы присвоить имя, необходимо выделить интересующую нас кнопку и в окне параметров задать ей имя. Таким образом, кнопка воспроизведения имеет имя – «play_btn», кнопка паузы – «pause_btn», кнока остановки видео – «stop_btn», кнопка перемотки вперед – «fwd_btn», кнопка перемотки назад – «rew_btn», кнопка прокрутки – «scroll», прогресс-бар – «vt_mc», элемент видео – «my_video», форма для плейлиста – «pl». Когда мы дали уникальные имена всем элементам плеера, можно приступать к написанию кода. Создадим обработчик событий для кнопок, который напрямую работают с самим видео, а также для прокрутки и прогресс-бара. На второй кадр слоя «action» добавляем следующий код:
stop();
// оброботчик событий для прокрутки.
// для того, чтобы текст в динамических полях отображался, маску нужно применять программно.
pl.setMask(pl.m);// что мы и делаем .
// если список умещается в контейнер, то полоса прокрутки (скроллер) нам не нужен.
if (pl._height < pl.m._height) // проверяем
{
scroll._visible = false; // если это так, скрываем скроллер
}
// если скроллер нам всё-таки нужен
// при нажатии на ползунок
scroll.bar.onPress = function() {
// начинаем его перетаскивать от самого верху (0) до низа-выоста ползунка
scroll.bar.startDrag(false, 4, 0, 4, scroll._height-scroll.bar._height);
scroll.onMouseMove = function ()// при движении курсора
{
// двигаем контейнер со списком воспроизведения на нужное расстояние
pl.y = 0-((pl._height-pl.m._height+10) * scroll.bar._y / (scroll._height-scroll.bar._height));
}
}
// когда пользователь отпускает кнопку мыши, нужно остановить движение ползунка
scroll.bar.onRelease = scroll.bar.onReleaseOutside = function() {
scroll.bar.stopDrag();
}
// Инициализация видео
mediaPlaying = false; // изначально при заходе на страницу видео не воспроизводится
isPlaying = null; // номер видео, которое играет плеер в данный момент
// переменная для setInterval - для ускорения перемотки
var timePressed:Number = null;
// длина ролика. ее мы будем получать по событию onMetaData
var seeker:Number = null;
// таймер фиксирующий время нажатия клавиши перемотки
var onTheRun:Boolean = false;
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
var duration:Number = 0;
//Чтобы проигрывать видео необходимо создать экземпляр типа Video //(Делается это в библиотеке)
my_video.attachVideo(motionStream);
stream_ns.setBufferTime(2);
function playVideo(numb) { // на вход принимается номер видео
// переводим активный элемент плейлиста в неактивное состояние
_root.pl['item'+isPlaying].fon.gotoAndStop(1);
isPlaying = numb;// переменной isPlaying присваиваем номер текущего видео
// переводим в активное состояние элемент плейлиста, по которому кликнули,
// который ссылается на видео, которое плеер воспроизводит в данный момент
_root.pl['item'+isPlaying].fon.gotoAndStop(2);
_root.connection_nc = new NetConnection();
_root.connection_nc.connect(null);
_root.stream_ns = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
_root.stream_ns.play(url[numb]);
// состояние плеера - проигрывается видео или нет
//Чтобы проигрывать видео необходимо создать экземпляр типа Video (Делается это в библиотеке)
my_video.attachVideo(stream_ns);
stream_ns.setBufferTime(2);
}
/// Указывает сколько секунд видео должно загрузиться чтобы началось воспроизведение. В процессе проигрывания, если первые 2 секунды уже проигрались, а вторая порция еще не подгрузилась происходит остановка, до тех пор пока не подгрузятся следубщие 2 секунды.
stream_ns.onMetaData = function(meta:Object):Void {
duration = meta.duration;}
stream_ns.onStatus = function(motion_status:Object):Void {
//// Событие помогает отслеживать состояния воспроизведения - ошибки загрущки, остановку, начало, перемотку - читаем хелп, там все написано. Вот тут возможен момент - если готовить flv в Макромедиа Флеш8Видео энкодере - и подрезать там длину ролика - то это неблагоприятно сказывается на статусе СТОП. Вывод - не резать длину ролика в энкодере.
if (motion_status.code == "NetStream.Play.Stop") {
stream_ns.seek(duration);
stream_ns.pause(true);
play_btn._visible = true;
pause_btn._visible = true;
}
};
play_btn.onRelease = function():Void {
this._visible = true;
pause_btn.pause = false;
if (onTheRun) {
if (vt_mc._width == 320) {
stream_ns.seek(0);
}
stream_ns.pause(false);
}
else {
onTheRun = true;
_root.stream_ns.play(url[numb]);
}
};
pause_btn.onRelease = function():Void {
this._visible = true;
play_btn._visible = true;
stream_ns.pause(true);
};
stop_btn.onRelease = function():Void {
stream_ns.seek(0);
onTheRun = false;
stream_ns.close();
my_video.clear();
};
rew_btn.onPress = function():Void {
clearInterval(seeker);
timePressed = 0;
seeker = setInterval(changePos, 100, -2);
};
fwd_btn.onPress = function():Void {
clearInterval(seeker);
timePressed = 1;
seeker = setInterval(changePos, 100, 2);
};
fwd_btn.onRelease = rew_btn.onRelease=function ():Void {
clearInterval(seeker);
timePressed = 1;
};
function changePos(dir:Number):Void {
timePressed++;
dir *= Math.ceil(timePressed/10);
var dest:Number = stream_ns.time+dir;
if (dest<0) {
dest = 0;
}
if (dest>duration) {
dest = duration;
}
stream_ns.seek(dest);
}
////// инициализация графики
vt_mc._width = 0;
// vt - индикатор времени
vl_mc._width = 0;
// vl - индикатор загруженного контентая
my_video.onEnterFrame = function():Void {
var proc:Number = Math.floor(stream_ns.bytesLoaded/stream_ns.bytesTotal*320);
vl_mc._width = proc<320 ? proc : 320;
var timer:Number = Math.ceil(stream_ns.time/duration*320);
vt_mc._width = timer<320 ? timer : 320;
};
