![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Добрый день. Тут недавно сталкнулся с проблемой, MOUSE_WHEEL не работает под MacOS.
Решением этой проблемы является слушание колеса мыши из js. Вот стало любопытно, можно ли это как-то сделать, не влезая в саму страницу, и прописывания там js, а только флешкой. Буду признателен всем наводящим фразам и мыслям по этому поводу. Спасибо.
__________________
Убейте меня! |
|
|||||
|
Понятное дело что ExternalInterface уже вот что-то начинаю создавать, вроде выходит пока, слава у ExtrnalInterface в AS3 появился objectID.
Попопжже покажу что у меня вышло. ![]() Целый день промудохался с кроссбраузерностью, однако сделал! Делюсь: package { import flash.display.MovieClip; import flash.external.ExternalInterface; public class u2 extends MovieClip { public function u2() { init(); } private function init( ) { ExternalInterface.addCallback( "callWheelListener", onWheel ); var objectID:String = ExternalInterface.objectID; var js:String = ""; js += "function() { \n"; js += " var delta = 0;\n"; js += " var browserType = navigator.appName;\n"; js += " var objectID = '" + objectID + "';\n"; js += " var target = (navigator.appName.indexOf('Microsoft') !== -1 ? window : document)[objectID]; \n"; js += " function wheel( event ) {\n"; js += " if( !event ) { //IE\n"; js += " event = window.event;\n"; js += " }\n"; js += " if ( event.wheelDelta ) {\n"; js += " if( window.opera ) { //Opera\n"; js += " delta = event.wheelDelta / 40;\n"; js += " } else { // Chrome, Safari\n"; js += " delta = event.wheelDelta / 40;\n"; js += " }\n"; js += " } else if( event.detail ) { // Mozilla\n"; js += " delta = -event.detail;\n"; js += " }\n"; js += " target.callWheelListener( delta );\n"; js += " }\n"; js += " if( browserType.indexOf('Netscape') !== -1 ) {\n"; js += " window.addEventListener('DOMMouseScroll', wheel, false);\n"; js += " window.onmousewheel = wheel;\n"; js += " } else {\n"; js += " document.onmousewheel = window.onmousewheel = wheel;\n"; js += " }\n"; js += "}"; ExternalInterface.call( js ); } private function onWheel( delta ):void { ExternalInterface.call( "alert('" + delta + "')" ); } } }
__________________
Убейте меня! Последний раз редактировалось джонатан; 10.11.2010 в 20:52. |
|
|||||
|
ветеран форума
|
Вот так, если память не изменяет тоже можно, и выглядит читабельней
package { import flash.display.MovieClip; import flash.external.ExternalInterface; public class u2 extends MovieClip { public function u2() { init(); } private function init():void { ExternalInterface.addCallback("callWheelListener", onWheel); var objectID:String = ExternalInterface.objectID; var js:String = <![CDATA[ function() { var delta = 0; var browserType = navigator.appName; var objectID = '" + objectID + "'; var target = (navigator.appName.indexOf('Microsoft') !== -1 ? window : document)[objectID]; function wheel( event ) { if( !event ) { //IE event = window.event; } if ( event.wheelDelta ) { if( window.opera ) { //Opera delta = event.wheelDelta / 40; } else { // Chrome, Safari delta = event.wheelDelta / 40; }; } else if( event.detail ) { // Mozilla delta = -event.detail; }; target.callWheelListener( delta ); } if( browserType.indexOf('Netscape') !== -1 ) { window.addEventListener('DOMMouseScroll', wheel, false); window.onmousewheel = wheel; } else { document.onmousewheel = window.onmousewheel = wheel; } }; ]]> ExternalInterface.call(js); } private function onWheel(delta):void { ExternalInterface.call("alert('" + delta + "')"); } } }
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 10.11.2010 в 22:50. |
|
|||||
|
а зачем обламываться, можно просто присвоить ему значение always
__________________
Убейте меня! |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Присвоить то можно, но вот только не везде получиться
|
|
|||||
|
это еще почему? И где не получится?
__________________
Убейте меня! |
|
|||||
|
.
|
Например, если не Вы владелец сгенерированной страницы.
Да и не страницей единой жив флеш. Если объекту FP хост приложение (не обязательно это должен быть браузер) запретит указанные выше действия, то, прощай JS. На самом деле на JavaScript и JScript дело не ограничивается. Как-то раз я писал клиентские скрипты на perl. В общем, прощай, External, наш Interface. Последний раз редактировалось dimarik; 11.11.2010 в 03:14. |
|
|||||
|
Понятное дело, но что поделать, решений я других не вижу. Только если адоби залатают баг этот, он кстати я так понял из-за иннерционного скрола в MacOS, проводя тест, я выявил что на маке, у меня дельта меняется в зависимости от скорочти вращения колеса, бывает -9, -6, -3, 3, 6, 9. Возможно в этом то и беда, но опять же ничего не попишешь. Так уж пусть лучше работает мой скрипт хоть где-то, чем не работает везде, верно? Кстати можно еще в условие вписать ExternalInterface.available, чтобы если заблочено, лишний код не выполнялся. Вот в общем я как с делал.
if( Capabilities.os.indexOf( "Mac" ) !== -1 && ExternalInterface.available ) { ExternalInterface.addCallback( "callWheelListener", Scrollbar.onMacWheel ); var objectID:String = ExternalInterface.objectID; var js:String = <![CDATA[ function() { var delta = 0; var browserType = navigator.appName; var objectID = ']]> + objectID + <![CDATA['; var target = (navigator.appName.indexOf('Microsoft') !== -1 ? window : document)[objectID]; function wheel( event ) { if( !event ) { //IE event = window.event; } else if ( event.wheelDelta ) { // Chrome, Safari, Opera delta = event.wheelDelta / 40; } else if( event.detail ) { // Mozilla delta = -event.detail; } if( delta != 0 ) { delta = delta > 0 ? 3 : -3; target.callWheelListener( delta ); } } if( browserType.indexOf('Netscape') !== -1 ) { window.addEventListener('DOMMouseScroll', wheel, false); window.onmousewheel = wheel; } else { document.onmousewheel = window.onmousewheel = wheel; } }]]>; ExternalInterface.call( js ); }
__________________
Убейте меня! Последний раз редактировалось джонатан; 11.11.2010 в 16:30. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:15. |
|
|
« Предыдущая тема | Следующая тема » |
|
|