![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Народ, замучился уже. Что только не пробовал...
Суть, короче, в следующем: 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 - это середина вышеупомянутого пункта меню } несмотря на это ползун продолжает двигаться за мышью при уходе ее из зоны меню ?.. |
|
|||||
|
не совсем понимаю - что мешает грубой силой (поставив условие) не давать ползунку выходить за определенные _х -ы? банально
if(this._x>n){this._x = n} или более удобно - if(this.nextx>n){ this.nextx = n; } this._x = this.nextx |
|
|||||
|
не оч. ясно в чем затык,
вариант: при наезде на подменю вешаем на ентерфрейм отслеживание мыши при уходе убиваем ентерфрейм, твином отправляем ползунок на текущую позицию (надо чтоб подменю соприкасались боками) 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. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
1. когда курсор уходит от меню вниз через ползун оnRollOut не срабатывает и ползун бегает за мышью, когда она вне меню. 2. мне не совсем понятно что такое import mx.transitions.* 3. передвижение ползуна все еще не ограничено длиной меню |
|
|||||
|
1.подозреваю что это происходит при нажатой мыши, определи onDragOut..
2.указние на пакет, классом которого пользуемся, можно и без import.., но тогда с полным путем new mx.transitions.Tween(.. 3.так ограничь, в чем проблема?.. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
проблема 3 описана мной в цитате Королю...
|
|
|||||
|
Цитата:
ну да ладно вот так работает.. 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)
}
}
|
|
|||||
|
а что, знак > работает только для целых чисел? в крайнем случае - Math.floor ещё никто не отменял
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Спасибо еще раз огромное. Можно последний вопрос?
В твоем коде я понимаю не очень много, но методом безумных проб я заметил, что если нижеподсвеченный участок заменить на item._x=xPos[i] то ползунок движется более плавно и при переходе мышью между элементами меню - он бежит сразу к мыши, а не совершает легкое движение назад от мыши и потом как и следует бежит к ней. Но есть и недостаток: при уходе мыши ползун не идет к серединке отрезка, на котором он находился, а останавливается "там, где есть". Вопрос в следующем: можно ли обьеденить преимущества двух этих вариантов записей, т.е. ползун двигается плавно и останавливается посередине. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|