私の戦略は、イベントがトリガーmenublur
されたときにリセットされる各イベントにタイマーを作成することです。menufocus
サブメニューが開いていて、メニュー全体からマウスを離すと、最後のイベントになるmenublur
ので、事前定義された時間が経過するとメニューを折りたたむことができます。
HTML:
<ul id="menu">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a>
<ul>
<li><a href="#">Item 3-1</a></li>
<li><a href="#">Item 3-2</a></li>
<li><a href="#">Item 3-3</a></li>
<li><a href="#">Item 3-4</a></li>
<li><a href="#">Item 3-5</a></li>
</ul>
</li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
JavaScript:
$(document).ready(function() {
var menu = $('#menu');
menu.menu();
var blurTimer;
var blurTimeAbandoned = 200; // time in ms for when menu is consider no longer in focus
menu.on('menufocus', function() {
clearTimeout(blurTimer);
});
menu.on('menublur', function(event) {
blurTimer = setTimeout(function() {
menu.menu("collapseAll", null, true );
}, blurTimeAbandoned);
});
});
デモ: jsfiddle </p>
リファレンス: setTimeout、clearTimeout