Просмотр полной версии : Отловить выход курсора за пределы флеша без JS
Всегда считал что сабж невозможен. И вот заказчик ткнул меня носом в http://www.volvocars.com/ru/models/Volvo-S80/gallery/Pages/default.aspx . Пару часов провисел над декомпайлером, но так и не допёр, какое событие определяет вход/выход флешки за пределы ролика (нужный handler висит на onRollOut / onDragOut, но как это может работать - хз).
JS'а там нет.
ставим большооой прозрачный прямоугольник поверх всего этого дела и лепим ему событие на RollOut-прятать курсор, на RollOver-показать
Molecula
19.02.2008, 21:22
Типа такого что-ли?
_http://www.av.kharkov.com/out.html
_http://www.av.kharkov.com/out2.html
Первый без реакции за пределами, второй, сы.
Однажды кто-то на форуме оставил этот монускрипт=)
Stage.align="TL";
Stage.showMenu=false;
Stage.scaleMode="noScale";
//
Stage.addListener(o=_global.mouseController=_level0.createEmptyMovieClip("$$$MOUSE$$CONTROLLER$$",-16381));
o.f=function(w,h){with(this){
_x=_y=0;
lineStyle(0,0,0);beginFill(0,0);
lineTo(w,0);
lineTo(w,h);
lineTo(0,h);
endFill();
};};
o.onResize=function(){this.f(Stage.width,Stage.height);};o.onResize();
addProp=function(o,p,f){o.addProperty(p,function(){return o[p];},f);};
addProp(o,"mouseOver",function(mouseOver){trace((mouseController.txt.text=(mouseOver)?("[мышка во флэшке]"):("[мышка вне флэшки]")));});
o.useHandCursor=false;
o.createTextField("txt",0,0,0,0,0).autoSize=true;//
p=function(o,m,f,n){o[m]=function(){f();this[n]();trace(n);}};
pr=function(o,m,f){for(var i=0;i<o.length;i++){for(var i2=0;i2<m.length;i2++){p(o[i],m[i2],f,(m[i2].charAt(2).toLowerCase()+substring(m[i2],4,m[i2].length-2)));};};};
o=[MovieClip.prototype,Button.prototype];
pr(o,["onRollOver"],function(){_global.mouseController.mouseOver=true;});
pr(o,["onDragOver"],function(){_global.mouseController.mouseOver=true;});
pr(o,["onRollOut"],function(){_global.mouseController.mouseOver=false;});
pr(o,["onDragOut"],function(){_global.mouseController.mouseOver=false;});
pr(o,["onReleaseOutside"],function(){_global.mouseController.mouseOver=false;});
pr(o,["onPress","onRelease"]);
//
attachMovie("myButton","but",0).stop();
but._x=but._y=200;
but.rollOver=function(){trace((this.text="навели на"+this));this.gotoAndStop(2);};
but.releaseOutside=function(){this.gotoAndStop(2);};
but.rollOut=function(){trace((this.text="отвели от"+this));this.gotoAndStop(1);};
but.press=function(){trace((this.text="нажали на"+this));};
but.release=function(){trace((this.text="отжали "+this));};
ставим большооой прозрачный прямоугольник поверх всего этого дела и лепим ему событие на RollOut-прятать курсор, на RollOver-показать
Вот ведь чертовщина! Спасибо!
Однажды кто-то на форуме оставил этот монускрипт=)Жуткий монускрипт, но смысл понятен. И ведь работает заразо! Жесть -)
А, черт. Все-равно не универсальное решение. В мувиках, созданных программно после выполнения этого кода, все eventHandlers не будут включены в схему.
Я сейчас написал синглтон, который на onEnterFrame проверяет все интерактивные мувики на Stage и, если пользователь переписал eventHandler, переписывает этот eventHandler так, чтобы синглтон получал оповещение onEvent.
Это абсолютно рабочая схема, но, очевидно-тормозная. Для маленьких проектов ( мувиков на Stage < 1000 ) тормоза будут не критичны. Дальше - ХЗ. Если кто придумает более эффективную схему - отпишитесь плиз.
А что её придумывать всё есть на AS3 :)
Fernando Costa
20.02.2008, 23:05
а что если создать кнопку-рамку в один пиксел - на всю флешку, и обрабатывать на ней ролловер/роллаут. При роллауте проверять позицию курсора. Может такое работать?
Вариант: повесить прозрачный мувик на всю сцену, и проверять hitTest'om в onEnterFrame наличие курсора на ним.
Люди, написавшие последние два поста, вы, вообще, понимаете о чём речь?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.