EXT的border布局如何实现按比例布局(同时可解决IE6中IFrame只显示一半问题)

EXT本身有提供一些相对布局的方案比如anchor,但并不是那么完善灵活:假如我有一个border布局,想让他们做到相对布局,怎样做到呢?

 

我的思路是这样的,第一步,利用html中标签的相对布局,即<div>,做按比例的相对布局,然后将我们的Ext panel附到每个div上。

<style type="text/css">
div#menu {
	height: 90%;
	width: 20%;
	float: left;
}

div#content {
	height: 90%;
	width: 80%;
	float: left;
}

div#footer {
	clear: both;
	text-align: center;
}
</style>


<div id="menu"></div>
<div id="content"></div>
<div id="footer"></div>


 

var menu = Ext.get("menu");
var content = Ext.get("content");
var footer = Ext.get("footer");

var westpanel = new Ext.Panel({
                id:'west-panel',
	region : 'west',
	title : "管理菜单",
	split : true,
//	width : menu.getComputedWidth(),
	height: menu.getComputedHeight(),
	margins: '0 3 5 5',
	applyTo : menu
});
var center = new Ext.Panel({
		region : 'center',
		margins: '0 5 5 0',
		applyTo : content,
		border: false,
		height: content.getComputedHeight(),
		html : '<iframe id="main" src="../project/project.jsp" width="100%" height="100%" scrolling="auto" frameborder="0" ></iframe>',
		listeners : {
			afterrender : function(){
				Ext.fly("main").setHeight(content.getComputedHeight());
			}
		}
	});
var footer = Ext.get("footer");
	var southpanel = new Ext.Panel({
		region : 'south',
		height : 30,
		width : footer.getComputedWidth(),
		applyTo : footer
});

applyTo把每个panel附到我们已经布局好的div上,这样效果就相当灵活了,只要html可以做到的布局,Ext都可以轻松嵌入其中。

window.οnresize=function(){
		westpanel.setHeight(0);
		westpanel.setHeight(menu.getComputedHeight());
//		southpanel.setWidth(0);
		center.setHeight(content.getComputedHeight());
		southpanel.setWidth(footer.getComputedWidth());
	};


不要忘了在EXT代码中加入这个方法,监听网页大小变化情况,当页面变化时,重新设置每个控件的大小,这样便可以做到当用户改变窗口大小,控件仍是按比例分布。

效果如下:

 

里面有相当重要的一点,困扰了我很久:在IE6下,由于我们的center面板使用了iFrame嵌入,iFrame的比例设为填满面板,即100%,iFrame使用相对高度会造成它只能显示一半。解决方法在上面代码中包含了:

listeners : {

      afterrender : function(){Ext.fly("main").setHeight(content.getComputedHeight());}

}

这句可解决Iframe在IE6中只能显示一半的BUG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值