extjs Active遮挡用Ext.useShims=true遮挡层和原来大小不一样

wangguosong 2009-11-24 03:28:06
extjs Active遮挡用Ext.useShims=true遮挡层和原来大小不一样
...全文
311 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
善良的白兰地 2011-10-12
  • 打赏
  • 举报
回复
终于解决了昨天碰到了菜单被applet挡住的问题,所采用的技术是Iframe Shim,参考文章是Using IFrame Shim to (partly) cover a Java applet
以下算是不断碰壁的简单总结吧,希望能对碰到类似问题的同仁有所帮助。
先说说基本Iframe Shim原理吧,我觉得是通过JavaScript动态创建iframe元素,同时设置相关的属性(比如z-index,postion等),来满足其浮动于applet或者其他插件之上。
我是用Ext做菜单的,所以采用的技术和方法都是和Ext相关,不过基本原理应该适合其他JavaScript框架的。
为此我用创建了id=inventory的Toolbar.Button组件,在其上又增加了几个Menu,现在增加代码如下:

javascript 代码
Ext.onReady(function(){
var tb = Ext.getCmp('inventory');
tb.on('menushow',function(toolbar,menu) {
var menuEl = menu.getEl();
createShim({
top:menuEl.getY(),
left:menuEl.getX(),
width:menuEl.getWidth(),
height:menuEl.getHeight()
});
});
tb.on('menuhide',function(toolbar,menu) {
var shimmer = document.getElementById('shimmer')
document.body.removeChild(shimmer);
});
});
function createShim(coordinate) {
var shimmer = document.createElement('iframe');
shimmer.id='shimmer';
shimmer.style.position='absolute';
shimmer.style.top=coordinate.top;
shimmer.style.left=coordinate.left;
shimmer.style.width=coordinate.width;
shimmer.style.height=coordinate.height;
shimmer.style.zIndex='999';
shimmer.setAttribute('frameborder','0');
shimmer.setAttribute('src','javascript:false;');
document.body.appendChild(shimmer);
}


首先在menushow事件中,动态创建shimmer,设置其position,left,top,width,height,zIndex等属性,要确保菜单的zIndex大于iframe的,还要确保iframe里边没有内容,即src应该为空。
其次在menuhide事件中移出动态创建的shimmer.
以上代码可以执行,非常感谢Ext为我们提供了便利的事件监听机制。
sean1203 2009-12-15
  • 打赏
  • 举报
回复
不是没人回答,只是没人知道

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧