#javascript #firefox #firefox-addon #xul
#javascript #firefox #firefox-аддон #xul
Вопрос:
<menu id="list-menu" class="icon-list menu-iconic" label="Menu list">
<menupopup>
<vbox flex="1" class="help">
<html:div class="help-text">
<label>Here is help text</label>
</html:div>
</vbox>
<vbox flex="1" class="list" id="list-box">
Here is box with default height 300px;
</vbox>
<vbox flex="1">
<button class="button" value="Here is button" />
<button class="button" value="Here is button 2" />
</vbox>
</menupopup>
</menu>
Если я резко наведу курсор мыши на элементы в menupopup, он закроется. Как это исправить?
Заранее спасибо.
Комментарии:
1. Я не понимаю человека. Можете ли вы сделать скринкаст и поделиться им? Как вы резко перемещаете мышь? Быстро? Вы имеете в виду быстрое наведение курсора мыши на него? Я не могу изменить размер, когда быстрое наведение курсора на элемент, прохождение и выключение элемента скрывает его. Но почему вы вставляете
vbox
‘s в amenupopup
, вы должны использовать apanel
, если хотите это сделать. ЕСЛИ вам нужен элемент menu xul, то вместо них должны бытьmenuitem
»vbox'
s», иhtml:div
элементы or не нужныlabel
. Наmenuitem
вы должны поставить ярлык. Можете ли вы поделиться своим основным кодом, я посмотрю на него и подключу панель для u.2. @Noitidart, извините за мой плохой английский. Я записываю видео для вас. ( youtube.com/watch?v=Tbq83w5fZ98 )
3. Пожалуйста, не нужно извиняться. Я ценю видео, я проверю его сейчас. 🙂 Хорошо, я видел видео. Есть ли у вас исходный код на github? Я посмотрю и помогу вам. Для этого обязательно следует использовать панель, а не меню.
4. @Noitidart, да, вот мой репозиторий: github.com/Exclumice/firex . Мне просто нужно заменить тег меню на панель?
Ответ №1:
О, теперь я вижу, это не было видно в видео, но это подменю, которое открывается при наведении курсора мыши на элемент меню.
.
Поэтому, когда вы наводите курсор мыши на «Список прокси>» menuitem
, который открывает подраздел menuitem
, и теперь хотите переместить курсор мыши из этого menuitem
в открывшееся подменю, вы ДОЛЖНЫ осторожно перемещать мышь, удерживая ее наведенной на «Список прокси>» menuitem
. Если ваша мышь уйдет из этого «Списка прокси>» menuitem
до того, как достигнет подраздела menuitem
, это приведет к удалению вашего подраздела, menuitem
даже если ваша мышь теперь находится над подразделом menuitem
. Чтобы обойти это, вы должны предотвратить скрытие всплывающего окна, если мышь находится над вашим подразделом menuitem
. Я напишу для вас кое-что здесь, я пойду поработаю над этим. Мое решение будет stopPropogation
включено popuphiding
, если пользователь наведет курсор мыши на эту панель. Но разместите это здесь, чтобы @nmaier мог увидеть, в чем ваша проблема, может быть, у него есть идеи получше, пока я работаю.
Хорошо, вот решение: в overlay.xul
добавлены onmousenter
onmouseleave
, и onmousedown
атрибуты, подобные этому:
<menupopup onmouseenter="Components.utils.reportError('entered');this.addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmousedown="Components.utils.reportError('downed');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="Components.utils.reportError('left');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)">
Затем в overlay.js
и эта функция:
preventHide: function(e) {
e.preventDefault();
Components.utils.reportError('PREVENTED HIDE'); //you can remove this, this is just a debug message to tell you when it hides
}
Итак, теперь это делает то, что вы хотите, вы можете попробовать, установив аддон из моей вилки: https://github.com/Noitidart/firex /
Редактировать: Хорошо, я понял вашу вторую проблему, в которой она скрывалась, даже после того, как мы реализовали вышесказанное. Теперь произошло обратное. Если вы осторожно перешли из «Список прокси>» в подменю, а теперь отсюда вы быстро перешли из подменю в «Список прокси>», но при наведении курсора мыши на «Отключить прокси» он скроет его, это нормальное ожидаемое поведение, но если вы хотите предотвратить этоя понимаю. Забудьте об этом stopPropogation
, я отредактирую код выше. Таким образом, решение этой проблемы заключается в добавлении к <menu>
тегу этих атрибутов: onmouseenter="this.childNodes[0].addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="this.childNodes[0].removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)"
Он также вызывал ложные события ввода и оставления при перемещении мыши в подменю. Итак, я исправил это, проверив event.relatedTarget
.
Итак, объединив оба решения выше, в overlay.xul у нас есть это сейчас:
<menu id="proxy-list-menu" class="icon-list menu-iconic" label="amp;proxy-list;" onmouseenter="this.childNodes[0].addEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="this.childNodes[0].removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)">
<menupopup onmouseenter="if (!event.relatedTarget) { Components.utils.reportError('entered');this.addEventListener('popuphiding', ProxyAddonBar.preventHide, false) }" onmousedown="Components.utils.reportError('downed');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false)" onmouseleave="if (!event.relatedTarget) { Components.utils.reportError('left');this.removeEventListener('popuphiding', ProxyAddonBar.preventHide, false) }">
Вопрос для @nmaier. После внесения моих изменений, если вы переместите курсор мыши из пункта подменю «Список прокси>» и случайно наведете курсор, но в итоге ваш курсор окажется на вложенном — menuitem
это предотвратит скрытие. Если вы затем переместите курсор мыши и нажмете «Отключить прокси» menuitem
или «Проверить скорость соединения», он НЕ скроет подменю, даже если я уже удалил preventHide
функцию. Он закроется, только если вы снова наведете курсор на «Список прокси>».
ЕСЛИ вы откроете подменю, наведя курсор мыши на «Список прокси>» и осторожно наведите курсор мыши на открывшееся подменю, не выходя случайно из пункта «Список прокси>», то, как только вы дойдете до подменю, а затем покинете его, наведя курсор на «Отключить прокси» или «Проверить скорость соединения», появитсязакройте примерно через секунду. Итак, это нормальное поведение скрытия, почему, когда я открываю скрытие, оно не скрывается как обычно, когда я навожу курсор на эти другие метки?
Комментарии:
1. Попробуйте, какой человек? Я еще не опубликовал решение! : P Дайте мне еще 10 минут
2. Хорошо, чувак, я отредактировал решение. Но у него есть дополнительный вопрос для небольшого qwirk для @nmaier. Это не так уж и важно, но мне нравятся идеальные вещи.
3. О, черт, ты прав. Ок, измените
onmouseleave
атрибут на этотif (!event.relatedTarget) { Components.utils.reportError('left');this.removeEventListener('popuphiding',ProxyAddonBar.preventHide,false); }
4. Хорошо, я понял вашу проблему. Теперь произошло обратное. Если вы осторожно перешли из «Список прокси>» в подменю, а теперь отсюда вы быстро перешли из подменю в «Список прокси>», но при наведении курсора мыши на «Отключить прокси» он скроет его, это нормальное ожидаемое поведение, но если вы хотите предотвратить этоя понимаю. Забудьте об этом
stopPropogation
, я отредактирую код выше.5. Ok отредактировал это выше, проверьте это. Обязательно удалите это
stopPropagation