ホバー時に、次のコードはサブメニュー パネルで最も高い列を取得し、すべての列を同じ高さに設定します。また、すべての列の幅の合計を取得し、列コンテナーの幅を合計に設定します。
$(function()
{
$("#menu> li").hover(function () {
var tallestColumnHeight = 0, submenuPanelTotalWidth = 0;
$("ul.sub-menu-1 > li", this).each(function () {
tallestColumnHeight = Math.max(tallestColumnHeight, $(this).height());
submenuPanelTotalWidth += parseInt($(this).outerWidth(), 10);
}).height(tallestColumnHeight);
$("ul.sub-menu-1 > li", this).parent().width( submenuPanelTotalWidth );
});
});
現在、上記のコードには、ホバーごとに高さと幅を 2 回取得して設定するため、多くのオーバーヘッドがあります。計算が一度だけ実行されるように、何らかのフラグを設定したいと思います。
何か案は?ここで jQuery .data() を使用して初期値を一度保存してから、データが設定されているかどうかを確認するのが賢明ですか?
これに関する提案やヘルプは大歓迎です!
アップデート
hover() を mouseenter() イベントに置き換えて one() を使用するのが最善の解決策でした。
更新されたコードは次のとおりです。
$(function()
{
$("#menu > li").one('mouseenter', function(e)
{
var tallestColumnHeight = 0,
submenuPanelTotalWidth = 0;
$("ul.sub-menu-1 > li", this).each(function ()
{
tallestColumnHeight = Math.max(tallestColumnHeight, $(this).height());
submenuPanelTotalWidth += parseInt($(this).outerWidth(true), 10);
}).height(tallestColumnHeight);
$("ul.sub-menu-1 > li", this).parent().width( submenuPanelTotalWidth );
});
});