私は jQuery メニューバーを作成しています。すべてがうまくいっていますが、最初の項目にもサブメニューがあるサブメニューを持つ最上位のメニュー項目にマウスを合わせると、奇妙な効果が得られます。20 回ほどマウス インとマウス アウト ([表示] メニュー項目の上を左右に移動) すると、[表示] > [エンコーディング] サブサブメニューがますます右に移動するのが見え始めます。
メニューバーのデモ例の修正版で問題を再現できます。私はFirefox 20.0.1を使用しています。
ここを参照してください:http://jsfiddle.net/Njjgm/
サブサブメニューの右端を見つけて、同じサブサブメニューの新しい左端をその位置に設定していると思います...したがって、開始を遅くするか、配置計算を修正すると、そのバグは発生しないはずです.
jquery.ui.menubar.jsファイルを調べて、setTimeoutsを調整できるかどうか、またはサブサブメニューの位置を修正できるかどうかを確認していますが、うまくいきません。
私はこれを見ています(jquery.ui.menubar.jsの262行目から):
__applyMouseBehaviorForSubmenuHavingMenuItem: function (input, menubar) {
var menu = input.next( menubar.options.menuElement ),
mouseBehaviorCallback = function( event ) {
// ignore triggered focus event
if ( event.type === "focus" && !event.originalEvent ) {
return;
}
if (event.type === "mouseenter") {
this.element.find(":focus").focusout();
if (this.stashedOpenMenu) {
this._open( event, menu);
}
this.stashedOpenMenu = undefined;
}
if ((this.open && event.type === "mouseenter")
|| this.options.autoExpand) {
if (this.options.autoExpand) {
clearTimeout( this.closeTimer );
}
this._open( event, menu );
}
};
また、これで:(jquery.ui.menubar.js行68から)
focusin: function( event ) {
clearTimeout( menubar.closeTimer );
},
focusout: function( event ) {
menubar.closeTimer = setTimeout (function() {
menubar._close( event );
}, 150 );
},
"mouseleave .ui-menubar-item": function( event ) {
if ( menubar.options.autoExpand ) {
menubar.closeTimer = setTimeout( function() {
menubar._close( event );
}, 150 );
}
},
"mouseenter .ui-menubar-item": function( event ) {
clearTimeout( menubar.closeTimer );
}
jquery uiメニューバーの経験がある人は、これを見て修正しましたか? setTimeout の修正方法を知っている人はいますか? HoverIntent は、メニューバーと同じ set/clearTimeout 手法を使用しているように見えるため、メニューバーからすべてのロジックを削除して追加したくありません。提案は歓迎します。ありがとう。