Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2010, 14:40
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 1  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Thumbs up Можно ли как-то из флеша объявлять js функции?

Добрый день. Тут недавно сталкнулся с проблемой, MOUSE_WHEEL не работает под MacOS.
Решением этой проблемы является слушание колеса мыши из js. Вот стало любопытно, можно ли это как-то сделать, не влезая в саму страницу, и прописывания там js, а только флешкой.
Буду признателен всем наводящим фразам и мыслям по этому поводу.
Спасибо.
__________________
Убейте меня!

Старый 10.11.2010, 14:45
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 2  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Смотри в сторону ExternalInterface - там вместо названия функции можно использовать саму функцию, хотя решение не очень красивое.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 10.11.2010, 15:12
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 3  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Понятное дело что ExternalInterface уже вот что-то начинаю создавать, вроде выходит пока, слава у ExtrnalInterface в AS3 появился objectID.

Попопжже покажу что у меня вышло.

Целый день промудохался с кроссбраузерностью, однако сделал! Делюсь:

Код AS3:
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.
Старый 10.11.2010, 22:44
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Вот так, если память не изменяет тоже можно, и выглядит читабельней
Код AS3:
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 + "')");
		}
	}
}
А еще есть что то типа MacMouseWheel.
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 10.11.2010 в 22:50.
Старый 10.11.2010, 22:48
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 5  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Все круто, пока не обломалось об allowNetworking или allowScriptAccess.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.11.2010, 23:46
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 6  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
а зачем обламываться, можно просто присвоить ему значение always
__________________
Убейте меня!

Старый 10.11.2010, 23:55
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 7  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
Присвоить то можно, но вот только не везде получиться

Старый 11.11.2010, 02:46
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 8  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
это еще почему? И где не получится?
__________________
Убейте меня!

Старый 11.11.2010, 03:09
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Например, если не Вы владелец сгенерированной страницы.

Да и не страницей единой жив флеш. Если объекту FP хост приложение (не обязательно это должен быть браузер) запретит указанные выше действия, то, прощай JS.

На самом деле на JavaScript и JScript дело не ограничивается. Как-то раз я писал клиентские скрипты на perl.
В общем, прощай, External, наш Interface.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 11.11.2010 в 03:14.
Старый 11.11.2010, 15:35
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 10  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Понятное дело, но что поделать, решений я других не вижу. Только если адоби залатают баг этот, он кстати я так понял из-за иннерционного скрола в MacOS, проводя тест, я выявил что на маке, у меня дельта меняется в зависимости от скорочти вращения колеса, бывает -9, -6, -3, 3, 6, 9. Возможно в этом то и беда, но опять же ничего не попишешь. Так уж пусть лучше работает мой скрипт хоть где-то, чем не работает везде, верно? Кстати можно еще в условие вписать ExternalInterface.available, чтобы если заблочено, лишний код не выполнялся. Вот в общем я как с делал.

Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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