Изменение поведения мыши в меню YUI

Я использую Yui для создания «всплывающего» меню, которое работает с мышью немного иначе, чем обычно. Это не ContextMenu, потому что я хочу, чтобы оно реагировало на левый щелчок, а ContextMenu, похоже, склонен реагировать на щелчки правой кнопкой мыши.

Следуя примерам, если я сделаю это, появится меню, и все будет примерно так, как я хочу:

YAHOO.util.Event.addListener(myClickTarget, 'click', myThingGotClicked);

В моей функции myThingGotClicked я вручную устанавливаю положение меню и show() его.

Моя проблема в том, что я хочу «привязать» видимость меню к состоянию кнопки мыши. То есть на mouseDown я хочу, чтобы меню появлялось, а на mouseUp я хочу, чтобы меню исчезло (выбрав активный элемент, если он есть). Итак, прослушивание события 'click' не дает правильного результата, потому что «щелчок» отправляется только после mouseUp.

«Очевидное» решение - сделать это:

YAHOO.util.Event.addListener(myClickTarget, 'mousedown', myThingGotClicked);

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

Есть предположения?


person Community    schedule 22.01.2009    source источник


Ответы (2)


Проблема в том, что класс MenuManager прослушивает событие mousedown на уровне документа и скрывает все видимые экземпляры Menu. Итак, поскольку вы создаете уникальную реализацию Menu, вам необходимо остановить распространение события mousedown внутри вашего обработчика, чтобы MenuManager не обрабатывал событие. Вот вам псевдокод:

var myThingGotClicked = function (event) {

    YAHOO.util.Event.stopPropagation(event);

    // Do other stuff

};

YAHOO.util.Event.on(myClickTarget, 'mousedown', myThingGotClicked);
  • Тодд
person Community    schedule 22.01.2009

Это немного ближе, поскольку меню действительно появляется, но если вы попытаетесь сделать выбор в меню, выделение текста на странице под ним станет своего рода орехами. Мне также нужно добавить обработчик mouseup, я думаю, поскольку меню не опускается при отпускании мыши.

Что мне действительно нужно, так это меню, которые работают как меню в каждой версии Mac OS (до недавнего времени, когда OS X добавляла кнопку «щелкнуть, чтобы сделать меню« прилипающим »к поведению по умолчанию).

person Community    schedule 26.01.2009