制作全局模式窗口

本文介绍如何使用JSF和RichFaces创建一个全局模式窗口,包括窗口模板的创建、脚本文件编写、样式调整及页面调用方法。通过具体代码示例展示了模式窗口的初始化、显示、隐藏等功能。
1、 首先创建全局模式窗口模版(实例参考globalModalPanel.xhtml)
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:s="http://jboss.com/products/seam/taglib">
<a4j:loadStyle src="/img/images/style.css" />
<a4j:form ajaxSubmit="false" ajaxSingle="true">
<a4j:region renderRegionOnly="false">
<a4j:jsFunction name="showLoading" action="#{common.globalMP.init('globalMP_tsck', '/blank.xhtml')}" reRender="#{common.globalMP.reRender}"/>
</a4j:region>
</a4j:form>
<rich:modalPanel id="globalMP" resizeable="fasle" autosized="true" top="50" styleClass="mp1" onshow="removeModalPanelTopFixedForIE6(this)">
<f:facet name="header">
<a4j:outputPanel layout="none">
<h:outputText id="globalMPTitle" value="#{common.globalMP.title}" style="margin-left:3px;vertical-align: middle;"/>
<a4j:status id="globalMPLoading" for="globalMPRegion" startText="#{messages.globalMP_zzcl}" startStyle="display:block;text-align:center;color:#FF8080;" />
</a4j:outputPanel>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/img/images/guanbi.gif" style="cursor: hand" onclick="globalMP.hide()" title="#{messages.globalMP_esc}"/>
</h:panelGroup>
</f:facet>
<span class="mpMessage" />
<a4j:region id="globalMPRegion">
<s:div id="globalMPInclude">
<ui:include src="#{common.globalMP.uri}" />
<s:div styleClass="contentLoading" rendered="#{common.globalMP.uri == '/blank.xhtml'}">#{messages.globalMP_zzjz}</s:div>
<div class="clear" />
</s:div>
</a4j:region>
</rich:modalPanel>
<script type="text/javascript">
//<![CDATA[
globalMP.init();
//]]>
</script>
</ui:composition>

2、 写脚本文件(public.js)
/**
* 全局模式窗口定义
*/
var globalMP = {
id : "globalMP",

init: function() { //初始化模式窗口
this.comp = document.getElementById(this.id).component;
},

show: function(width,height) { //显示模式窗口,并设置高度和宽度
width = width || 450;
height = height || 170;
Richfaces.showModalPanel(this.id, {width: width, height :height});
},

hide: function() { //隐藏模式窗口
showLoading(); //关闭模式窗口的时候清空模式窗口
this.comp.hide();
},

reset: function() { //重新加载模式窗口
this.comp.hide();
this.comp.show();
},

getContainer: function() { //获取模式窗口的id
return this.comp.id;
}

};

//ESC关闭弹出层
jQuery(document).keydown(function(event) {
//按下ESC按钮
if(event.keyCode == 27) {
globalMP.hide();
}
});
3、 修改richfaces原始样色(theme.css)
.mp1 .rich-mpnl_panel { //控制模式窗口可滚动
position: absolute;
}
.mp1 .rich-mpnl-header { //头部样色
background-image:url(../img/images/title.gif);
border-width: 0;
text-align: left;
height:20px;
vertical-align: middle;
}
.mp1 .rich-mp-content { //内容样色
background:url(../img/images/context.gif) repeat-x white;
border:2px #6F99D5 solid;
background-position:bottom;
margin:0 auto;
}
4、 页面调用
<a4j:region renderRegionOnly="false">
<a4j:commandLink action="#{common.globalMP.init('system_xxxx', '/business/warehouse/PssKcxx.xhtml')}" value="#{messages.View}" onclick="globalMP.show()" eventsQueue="queue" reRender="#{common.globalMP.reRender}" id="view" rendered="#{s:hasPermission('kcgl', 'VIEW')}">
<f:param name="pssKcxxKcbh" value="#{_pssKcxx.kcbh}" />
</a4j:commandLink>
</a4j:region>
注:<a4j:region renderRegionOnly="false"/>只提交该按钮,不刷新其它
eventsQueue=“queue” 为队列,使所有的链接都在同一个队列里面,避免队列冲突
<f:param name="pssKcxxKcbh" value="#{_pssKcxx.kcbh}" /> 模式窗口传递参数,该参数必须在调用该模式窗口的page配置页面中配置
要在Excel VBA中通过UserForm窗口制作烟花效果是一个有趣的小项目。虽然VBA本身不是专门用于图形和动画设计的语言,但是我们仍然可以利用其提供的控件以及一些简单的数学计算来模拟出类似的效果。 ### 步骤概述 1. **创建 UserForm** 打开Excel并按 `Alt + F11` 进入VBA编辑环境,在插入菜单下选择“用户窗体” (UserForm) 来添加一个新的表单。这个表体会作为展示烟花爆炸视觉效果的基础容器。 2. **绘制背景及初始化设置** - 设置合适的窗体大小,并考虑是否需要边框等样式调整。 - 使用Shape对象或直接画图工具在窗体内构造夜空般的深色背景。 3. **编写生成粒子的代码逻辑** 每次点击按钮或其他触发事件时随机生成一组代表火花的数据点位置、速度矢量、颜色等属性信息存放在数组里备用;然后启动计时器每隔一定间隔刷新一次画面显示所有活动状态下的粒子移动情况直至消失不见为止。 4. **定时更新粒子的位置与渲染图像** 借助于Timer控件周期性地调用自定义函数改变每个活跃元素的新坐标值并通过循环遍历列表逐个将其映射到相应的屏幕区域上形成连续变化的画面感观体验。 5. **优化性能和平滑度** 对大量细小物体频繁操作可能会导致系统负担过重影响流畅运行,因此要注意合理规划好每帧间的切换频率还有尽量减少不必要的绘图命令次数提高效率降低延迟现象发生几率。 6. **增加交互功能** 如果希望让用户体验更加丰富的话还可以进一步完善如支持多点触碰放烟火模式或者允许玩家自行调节绽放范围半径等功能选项供人自由发挥创意想象空间无限大! 下面是一段简化版的核心代码片段示例: ```vba Private Sub CommandButton1_Click() ' 触发烟花特效... End Sub Dim Particles() As ParticleType ' 定义全局变量存储粒子数据结构... Sub StartFireworks() Dim i As Integer ReDim Preserve Particles(0 To UBound(Particles) + 1) With Particles(UBound(Particles)) .X = Me.Width / 2 ' 起始x轴中心位移距离 .Y = Me.Height ' y轴底部起点高度 Randomize Timer For i = 1 To Int((Rnd * 10)) + 5 ' 控制每次产生的火屑数目的不确定性区间[5~15] CreateParticle Next i Timer1.Enabled = True ' 启动定时器开始动态演示过程... End With End Sub Sub UpdateParticles() Static tCount As Long Const MaxTime = 80 Dim p As ParticleType, i As Byte If tCount >= MaxTime Then Exit Sub Else tCount = tCount + 1 For Each p In Particles DrawParticle p.X, p.Y, RGB(p.R, p.G, p.B), p.Size If Not IsExplored Yet Then ExplodeItNow MoveEachOneByVectorTowardsCenterBasedOnElapsedTimeSinceLastFrame ReduceSizeAsTheyFadeAwayGraduallyAccordinglyToAge If ShouldBeRemovedThen EraseThatParticleFromList Next p End Sub ' ...其余辅助性的内部处理子程序略去未给出完整实现细节... ' ``` 请注意以上只是一个简化的思路框架指引,并非可以直接使用的成品脚本文件;实际应用时还需根据具体需求做适当修改补充才能达到预期理想中的绚丽多彩的视觉呈现结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值