悬停时,以下代码获取子菜单面板中最高的列,并将所有列设置为相同的高度。它还获取所有列的宽度之和,并将列容器宽度设置为总和:
$(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 );
});
});
现在上面的代码有很多开销,因为它在每次悬停时获取并设置高度和宽度两次。我想设置某种标志,以便计算只运行一次。
有任何想法吗?在这里使用 jQuery .data() 存储一次初始值然后检查数据是否设置是否明智?
非常感谢任何建议或帮助!
更新
用 mouseenter() 事件替换 hover() 并使用 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 );
});
});