让Bootstrap3的菜单位于Iframe之上

一般情况下,Bootstrap的菜单可以由如下方法创建:

<div class="dropdown">
  <a data-toggle="dropdown" href="#">单击我显示菜单</a>
  <ul class="dropdown-menu" role="menu">
    <li><a class="menuitem" tabindex="-1" href="#">菜单项1</a></li>
    <li><a class="menuitem" tabindex="-1" href="#">菜单项2</a></li>
    <li><a class="menuitem" tabindex="-1" href="#">菜单项3</a></li>
  </ul>
</div>

但是有些时候,dropdown的外层容器并非DIV(可能是li或者其他元素),或者菜单DIV被设置了大小,或者菜单需要位于带有z-index的元素之上,这个时候可以使用绝对定位创建菜单。
menuHtml = '<div class="dropdown" style="position:absolute" id="nav_toggler_wrap">';
menuHtml += '<a data-toggle="dropdown" id="nav_toggler"></a>';
menuHtml += '<ul class="dropdown-menu" role="menu">'
menuHtml += '<li><a class="menuitem">关闭所有选项卡</a></li>';
menuHtml += '</ul>';
menuHtml += '</div>';
$("body").append(menuHtml);

因为是绝对定位,这里菜单可以放在任何位置,如果iframe被设置了z-index,dorpdown也要设置。为了方便触发了调整菜单的位置,这里给菜单 Wrap和触发的元素都设置了ID。

然后,在需要触发的位置:

obj.on('click',function(e){
	e.stopPropagation();//必须有 否则菜单弹出后会立刻消失
	var _this = $(this);			
	if(_this.hasClass("navigation-item-options-menu-button")){
		var pos = GetAbsPos(this);
		$("#nav_toggler_wrap").css({
			"top":pos.top+32,
			"left":pos.left
		});
		$("#nav_toggler").dropdown("toggle");
	}
});	

GetAbsPos是一个函数,用于获得某元素的绝对坐标

function get_abs_position(obj)
{
	var o = $(obj);
	var obj_x = o.offset().left;
	var obj_y = o.offset().top;
	while(o.attr("parentNode"))
	{
		o = o.parent();
		obj_x += o.offset().left;
		obj_y += o.offset().top;
	}
	var p = {"left":obj_x,"top":obj_y};
	return p;
}

这样,当点击按钮时,菜单就会弹出了,实际上,Bootstrap的菜单非常简单,只需要给dropdown所在的元素添加类open,菜单就会展开。效果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值