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

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

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

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Post onRollOver - onRollOut для меню.

Народ, замучился уже. Что только не пробовал...
Суть, короче, в следующем:
1. есть меню, по которому бегает ползунок, плавно скользящий за мышью
2. хочу, чтобы при выходе мыши за пределы меню, ползунок также плавно возвращался на середину того подменю (отрезка меню - одного из 4), в котором он находился при убирании мыши (см. прикрепленный файл).
3. хочу ограничить передвижение ползунка крайними размерами меню
4. хочу чтобы в зависимости от координаты ползунок давал разные ссылки (т.е. в зависимости от того на каком отрезке меню он находится)

Теперь самый главный вопрос: не слишком ли я многого хочу и возможно ли это вообще во флеш. В принципе в AS я немного разбираюсь, но если это возможно, то такая задача мне не под силу. Пожалуйста помогите, хотя бы дельным советом.
Вот выкладываю пока свой код:

//assoc_mc - пункт меню associations
assoc_mc.onRollOver = function() {
var speed:Number = .1;
polzun_mc.onEnterFrame = function() {
if (this._x != 300) {
xDist = Math.floor(_xmouse-this._x);
this._x += xDist*speed;
speed = speed--;
} else {
this._x = 320;
delete vbn_mc.onEnterFrame;
}
};
};
assoc_mc.onRollOut = function(){
this._x = 320;
//здесь 320 - это середина вышеупомянутого пункта меню
}

несмотря на это ползун продолжает двигаться за мышью при уходе ее из зоны меню ?..
Вложения
Тип файла: rar Menu.rar (2.4 Кб, 59 просмотров)

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

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
не совсем понимаю - что мешает грубой силой (поставив условие) не давать ползунку выходить за определенные _х -ы? банально
if(this._x>n){this._x = n}
или более удобно -
if(this.nextx>n){
this.nextx = n;
}
this._x = this.nextx

Старый 01.02.2006, 10:21
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не оч. ясно в чем затык,
вариант:
при наезде на подменю вешаем на ентерфрейм отслеживание мыши
при уходе убиваем ентерфрейм, твином отправляем ползунок на текущую позицию
(надо чтоб подменю соприкасались боками)
Код:
import mx.transitions.*;

var items=[com_mc,por_mc,assoc_mc,con_mc];
var xPos=[100,200,300,400];

for(var i=items.length;i--;){
	var item=items[i];
	item.x=xPos[i];
	item.onRollOver=function(){
		vbn_mc.onEnterFrame=function(){
			this._x+=(_xmouse-this._x)/8;
		}
	}
	item.onRollOut=function(){
		for(var i=items.length;i--;)if(items[i].hitTest(_xmouse,_ymouse)) break;
		if(i>=0)return;
		delete vbn_mc.onEnterFrame;
		new Tween(vbn_mc,"_x",null,vbn_mc._x,this.x,10)
	}
}
зы: поправочка (выделено) : создаем твин только если совсем уходим, а то дергается не поделу


Последний раз редактировалось silin; 01.02.2006 в 10:31.
Старый 01.02.2006, 14:30
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 4  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от Король
не совсем понимаю - что мешает грубой силой (поставив условие) не давать ползунку выходить за определенные _х -ы? банально
if(this._x>n){this._x = n}
или более удобно -
if(this.nextx>n){
this.nextx = n;
}
this._x = this.nextx
как оказывается ползун не всегда имеет целую координату _х, что исходит из уравнения его движения и опять же округление в данном случае не совсем способно удовлетворить выдаче целого значения, т. к. в итоге мы имеем дело с суммой 2-х чисел.

Старый 01.02.2006, 14:58
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
По умолчанию !!!

Цитата:
Сообщение от silin
не оч. ясно в чем затык,
вариант:
при наезде на подменю вешаем на ентерфрейм отслеживание мыши
при уходе убиваем ентерфрейм, твином отправляем ползунок на текущую позицию
(надо чтоб подменю соприкасались боками)
Код:
import mx.transitions.*;

var items=[com_mc,por_mc,assoc_mc,con_mc];
var xPos=[100,200,300,400];

for(var i=items.length;i--;){
	var item=items[i];
	item.x=xPos[i];
	item.onRollOver=function(){
		vbn_mc.onEnterFrame=function(){
			this._x+=(_xmouse-this._x)/8;
		}
	}
	item.onRollOut=function(){
		for(var i=items.length;i--;)if(items[i].hitTest(_xmouse,_ymouse)) break;
		if(i>=0)return;
		delete vbn_mc.onEnterFrame;
		new Tween(vbn_mc,"_x",null,vbn_mc._x,this.x,10)
	}
}
зы: поправочка (выделено) : создаем твин только если совсем уходим, а то дергается не поделу
Код работает великолепно, это то, что нужно!!! Но есть несколько нюансов:
1. когда курсор уходит от меню вниз через ползун оnRollOut не срабатывает и ползун бегает за мышью, когда она вне меню.
2. мне не совсем понятно что такое import mx.transitions.*
3. передвижение ползуна все еще не ограничено длиной меню

Старый 01.02.2006, 16:14
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
1.подозреваю что это происходит при нажатой мыши, определи onDragOut..
2.указние на пакет, классом которого пользуемся,
можно и без import.., но тогда с полным путем new mx.transitions.Tween(..
3.так ограничь, в чем проблема?..

Старый 01.02.2006, 18:24
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 7  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
проблема 3 описана мной в цитате Королю...

Старый 01.02.2006, 18:56
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
не совсем способно удовлетворить выдаче целого значения
ни черта не понял причем тут целые..,
ну да ладно вот так работает..
Код:
var items=[com_mc,por_mc,assoc_mc,con_mc];
var xPos=[100,200,300,400];
var leftLim=50+vbn_mc._width/2;
var rightLim=450-vbn_mc._width/2;
for(var i=items.length;i--;){
	var item=items[i];
	item.x=xPos[i];
	item.onRollOver=function(){
		vbn_mc.onEnterFrame=function(){
			var x=_xmouse;
			if(x<leftLim)x=leftLim
			if(x>rightLim)x=rightLim;
			this._x+=(x-this._x)/8;
		}
	}
	item.onRollOut=item.onDragOut=function(){
		for(var i=items.length;i--;)if(items[i].hitTest(_xmouse,_ymouse,true)) break;
		trace(i)
		if(i>=0)return;
		delete vbn_mc.onEnterFrame;
		new mx.transitions.Tween(vbn_mc,"_x",null,vbn_mc._x,this.x,10)
	}
}

Старый 01.02.2006, 20:07
Король вне форума Посмотреть профиль Отправить личное сообщение для Король Найти все сообщения от Король
  № 9  
Ответить с цитированием
Король
 
Аватар для Король

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
а что, знак > работает только для целых чисел? в крайнем случае - Math.floor ещё никто не отменял

Старый 02.02.2006, 04:49
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 10  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Thumbs up !!!

Спасибо еще раз огромное. Можно последний вопрос?

В твоем коде я понимаю не очень много, но методом безумных проб я заметил, что если нижеподсвеченный участок заменить на item._x=xPos[i] то ползунок движется более плавно и при переходе мышью между элементами меню - он бежит сразу к мыши, а не совершает легкое движение назад от мыши и потом как и следует бежит к ней.

Но есть и недостаток: при уходе мыши ползун не идет к серединке отрезка, на котором он находился, а останавливается "там, где есть".

Вопрос в следующем: можно ли обьеденить преимущества двух этих вариантов записей, т.е. ползун двигается плавно и останавливается посередине.

Цитата:
Сообщение от silin
Код:
var items=[com_mc,por_mc,assoc_mc,con_mc];
var xPos=[100,200,300,400];
var leftLim=50+vbn_mc._width/2;
var rightLim=450-vbn_mc._width/2;
for(var i=items.length;i--;){
	var item=items[i];
	item.x=xPos[i];
	item.onRollOver=function(){

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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