Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастерство Flash. Профессиональные техники программирования Немного про JavaScript


Информационный Канал Subscribe.Ru


С Новым 2004 Годом и с Рождеством вас, уважаемые мои читатели.

Желаю, чтобы у всех вас сложилось в этом году все то, о чем вы мечтали...

Почему-то до сих пор я получил только два отклика, несмотря на то, что число подписчиков растет. Активнее надо, товарищи, активнее – а то скоро я не буду знать, о чем и для кого писать.

На этот раз я расскажу вам про интеграцию Flash и JavaScript. В этом мне поможет сайт Mustard Laboratory, на котором лежат два очень полезных и познавательных скрипта.

Но для начала – как вообще можно связать Flash и JavaScript. Вижу, кто-то уже тихо шепчет: "fsCommand". Да, fsCommand была придумана именно для связи плеера и браузера, но оказалась слишком неудобной в эксплуатации. Поэтому теперь флешеры пользуются конструкцией

getUrl('javascript:...........;void(0);');

Хочу обратить Ваше внимание на то, что в конце списка javaScript команд обязательно должно стоять void(0); - иначе вместо выполнения команд браузер перейдет на пустую страницу.

Итак, первый из упомянутых скриптов. Он позволяет (маэстро, туш!) менять размеры окна флеш-плеера из самого флеш-плеера. Таким образом, можно показать длинный кусок текста во флеше, пользуясь скроллером браузера. Как же это делается? Для начала код на JavaScript

<script>
// by http://www.mustardlab.com/developer/flash/objectresize/
/*
Methods for resizing the flash stage at runtime.
setFlashWidth(divid, newW)
divid: id of the div containing the flash movie.
newW: new width for flash movie
setFlashWidth(divid, newH)
divid: id of the div containing the flash movie.
newH: new height for flash movie
setFlashSize(divid, newW, newH)
divid: id of the div containing the flash movie.
newW: new width for flash movie
newH: new height for flash movie
canResizeFlash()
returns true if browser supports resizing flash, false if not.
*/
function setFlashWidth(divid, newW){
document.getElementById(divid).style.width = newW;
}
function setFlashHeight(divid, newH){
document.getElementById(divid).style.height = newH;
}
function setFlashSize(divid, newW, newH){
setFlashWidth(divid, newW);
setFlashHeight(divid, newH);
}
function canResizeFlash(){
var ua = navigator.userAgent.toLowerCase();
var opera = ua.indexOf("opera");
if( document.getElementById ){
if(opera == -1) return true;
else if(parseInt(ua.substr(opera+6, 1)) >= 7) return true;
}
return false;
}
</script>

Теперь кладем наш флеш-ролик, лежащий в обрамлении тегов <object> в слой:

<div id="flashid" style=""width:400px;" height:300px;">

И вуаля - для изменения размеров ролика надо просто написать в флеше:

getUrl('javascript:setFlashSize("flashid",200,500);void(0);');

Теперь второй скрипт. С его помощью можно реализовать прокрутку мышиным колесиком в 6-м флеше. Да, в семерке это встроено, НО... Седьмой плеер пока только у 10 – 15 процентов пользователей, и многие пока не собираются на него переходить.

Возьмем html файл целиком:

<html>
<head>
script type="text/javascript">
function enableScroll(obj){
obj.canScroll = true;
}
function disableScroll(obj){
obj.canScroll = false;
}
function scrollFlash(obj){
if(obj.canScroll == true){
window.event.returnValue = false;
if (window.event.wheelDelta >= 120){
var scrollSpeed = -3;
}else if(window.event.wheelDelta <= -120){
var scrollSpeed = 3;
}
obj.SetVariable("_root.scrollWheel",scrollSpeed);
}
}
</script>
</head>
<body>
<object id="Mouser" data="mousewheel.swf" width="480" height="300" onmousewheel="scrollFlash(this)" onfocus="enableScroll(this)" onblur="disableScroll(this)" type="application/x-shockwave-flash">
<param name="movie" value="mousewheel.swf" />
</object>
</body>
</html> 

В коде яваскрипта есть три функции. enableScroll и disableScroll разрешают и запрещают мувиклипу реагировать на события мышки, а scrollFlash изменяет значение переменной прокрутки.

В нашем же клипе нужно добавить обработчик для отлова изменившихся значений, например, такой:

_root.onEnterFrame = function() {
    if (scrollWheel != 0) {
      eval(Selection.getFocus()).scroll += parseInt(scrollWheel);
      scrollWheel = 0;
   }
};

Как видите, проще - некуда. Зато теперь можно использовать колесико не только в текстовых полях, а например, в игре - для наведения на цель.

Хочу еще заметить, что все эти скрипты работают только под Windows в IE5.5 и выше или в Netscape 4.7 и выше

Жду ваших откликов и писем на ilya_cat@mail.ru

Искренне ваш, Илья.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное