PDA

Просмотр полной версии : Самодельные выпадающие списки, их прокручивание средней кнопкой мыши


true11
12.08.2009, 14:14
Нужно было сделать регистрацию на сайте в подгружаемом ролике, так как встроенные компоненты в подгружаемых роликах работают оч часто некорректно сделал несколько самодельных так называемых "select"-ов, все оч мило, но хотелось бы для удобства добавить фичу, чтобы при onRollOver-e если двигать колесиком, содержимое селекта тоже двигалось. Не могу найти где и как отлавливать колесико мыши((( гуру, выручайте((

P.S. Проблему почти решил, повезло-таки с поиском. Но опять же остаеца открытым вопрос, как именно при наведении на определенный мувик активировать определенную функцию прокрутки(вверх/вниз) (грубо говоря, куда совать onRollOver):

mouseListener.onMouseWheel = function(wheel) {
if(wheel>0){
trace("Вы крутите колесо вверх");
}else {
trace("Вы крутите колесо вниз");
}
}
Mouse.addListener(mouseListener);

KiL33
12.08.2009, 14:51
mouse = new Object();
mouse.onMouseWheel = function(delta) {
if (delta<0) {
trace("0")
}
if (delta>0) {
trace("1")
}
};
Mouse.addListener(mouse);

etc
12.08.2009, 14:57
KiL33, а зачем создавать бесполезный объект?

KiL33
12.08.2009, 15:01
Если вы знаете другой способ покажите, в этом примере без объекта скролл работать не будет.

Добавлено через 20 минут
ГЫ
можно и так:umnik2:
mouse = new Object();
mouse.onMouseWheel = function(wheel) {
if (wheel<0) {
trace("0")
}
if (wheel>0) {
trace("1")
}
};
Mouse.addListener(mouse);

mooncar
12.08.2009, 15:37
Автор, вот вам решение. Сколько есть объектов, сделайте это для каждого mc с учетом ваших операций вместо trace.
(Не забудьте щелкнуть где угодно во флешке, иначе onMouseWheel не станет работать).
mc1.onRollOver = function () {
this.onMouseWheel = function(wheel) {
if (wheel < 0) {
trace("0");
}
if (wheel > 0) {
trace("1");
}
};
Mouse.addListener(this);
}

mc1.onRollOut = function () {
delete this.onMouseWheel;
Mouse.removeListener(this);
}

В качестве слушателя событий мыши тут выступает сам mc.
При наведении на mc включается функция, которая ловит поворот колесика, а при уведении с mc
она удаляется.

etc
12.08.2009, 15:39
KiL33, а this чем не угодил?

true11
13.08.2009, 02:04
Блин.. огромное спасибо всем, но возникла проблема в том что при заходе мышки на любой пункт селекта(это мувики с текстом и бэкграундом, реагирующие на полный спектр онролловеров и прочей кнопочной лабуды) теряется onRollOver для клипа прокрутки.. в отчаянии, смотрел как сделать рабочими кнопку под кнопкой, но тут решения не нашел... а если сделать свой компонент он будет работать в подгружаемых swf? как в таких случаях делают регистрацию с селектами?

KiL33
13.08.2009, 06:26
KiL33, а this чем не угодил?
хз..просто решил так написать и всё тут. Особо страшного в этом ничего не вижу.

mooncar
13.08.2009, 10:25
Вы вроде бы говорили, что у вас все самоделное...
как в таких случаях делают регистрацию с селектами?
вот эта фраза не очень понятна, но многие проблемы с потерей RollOver можно решить с помощью проверки hitTest.

true11
14.08.2009, 02:09
Мм.. выпадающие селекты - для выбора даты рождения. Мм вот попробовал сделать нечто, но попал на глюк.. фишка в том, что если навести на область 1й раз мышь, прокручивается с одной скоростью, а если раз тридцать навести-убрать, то скорость возрастает раз в 20..

Вот мой код для события wheel одного из объектов.. конченный немного, не судите пианиста, глаза слипаются и мозг не варит((

var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(wh){
if (wheel_days.hitTest(_root._xmouse, _root._ymouse)) {
if(wh>0){if(scrollDays.begunok._y > 0){scrollDays.begunok._y = scrollDays.begunok._y-2;}else{scrollDays.begunok._y = 0;} }
if(wh<0){if(scrollDays.begunok._y < 89){scrollDays.begunok._y = scrollDays.begunok._y+2;}else{scrollDays.begunok._y = 89;}}
}

if (wheel_month.hitTest(_root._xmouse, _root._ymouse)) {
if(wh>0){if(scrollMonths.begunok._y > 0){scrollMonths.begunok._y = scrollMonths.begunok._y-2;}else{scrollMonths.begunok._y = 0;} }
if(wh<0){if(scrollMonths.begunok._y < 89){scrollMonths.begunok._y = scrollMonths.begunok._y+2;}else{scrollMonths.begunok._y = 89;}}
}

if (wheel_year.hitTest(_root._xmouse, _root._ymouse)) {
if(wh>0){if(scrollYears.begunok._y > 0){scrollYears.begunok._y = scrollYears.begunok._y-2;}else{scrollYears.begunok._y = 0;} }
if(wh<0){if(scrollYears.begunok._y < 89){scrollYears.begunok._y = scrollYears.begunok._y+2;}else{scrollYears.begunok._y = 89;}}
}
}

Mouse.addListener(mouseListener);
Вроде должно норм быть.. Не будет систему грузить добро это?

mooncar
14.08.2009, 02:38
У вас очень криво отформатирован код. При большом количестве вложенных условий очень трудно оценить уровни вложенности условий. Располагайте if и соответственные завершающие скобки блока кода на одних вертикальных уровнях.
По-моему
islistener = 1;
у вас находится вне блока
if (islistener == 0){
.....
}
Хотя логика мне еще не ясна, но сдается, что islistener = 1 должен стоять внутри...