Fadein and Fadeout a Richfaces ModalPanel
Today i explain you a cool combination for rich:modalPanel and rich:effect.
In the richfaces forum i found a article about a modalpanel with scriptaculous-effects („fade-in a modalpanel“). The answer was a link to the official richfaces demo-application (photoalbum). There we can find a login-dialog (svn source) with a „appear-effect“:
<rich:modalPanel id="loginPanel" onshow="applyModalPanelEffect('loginPanel', appearFunc,{delay: 0.5, afterFinish: function(){$('loginPanelForm:username').focus();}})" styleClass="login-panel" showWhenRendered="#{authenticator.loginFailed}" width="400" height="150" autosized="true"> <f:facet name="header">#{messages['login.login']}</f:facet> <f:facet name="controls"> <h:panelGroup id="loginPanelHideControl"> <h:graphicImage value="/img/modal/close.png" style="cursor:pointer" id="loginPanelhidelink" onclick="#{rich:component('loginPanel')}.hide();"/> </h:panelGroup> </f:facet> ... <rich:effect type="Appear" name="appearFunc"/> ...
The javascript method applyModalPanelEffect can be found in the photoalbum.js (svn source):
function applyModalPanelEffect(panelId, effectFunc, params) { if (panelId && effectFunc) { var modalPanel = $(panelId); if (modalPanel && modalPanel.component) { var component = modalPanel.component; var div = component.getSizedElement(); Element.hide(div); effectFunc.call(this, Object.extend({targetId: div.id}, params || {}));}} }
With this the rich:modalPanel will not shown immediately … it appears 😉 This was the „fade-in part“.
I improved the code for the „fade-out part“, first the dialog:
<!-- first the effects --> <rich:effect type="Appear" name="appearDialog"/> <rich:effect type="Fade" name="disappearDialog"/> <!-- to keep the dialog-code clean --> <c:set var="closeDialog" value="hideModalPanelWithEffect('myDialog',disappearDialog,{delay:0.1,duration:0.5})"/> <rich:modalPanel id="myDialog" onshow="showModalPanelWithEffect('myDialog',appearDialog,{delay:0.1,duration:0.5})" width="610" height="350" minHeight="350" autosized="true" shadowDepth="0"> <f:facet name="controls"> <h:panelGroup> <h:graphicImage value="/img/modal/close.png" style="cursor:pointer" onclick="#{closeDialog}"/> </h:panelGroup> </f:facet> </rich:modalPanel>
and the javascript:
function applyModalPanelEffect(panelId, effectFunc, params, hide) { if (panelId && effectFunc) { var modalPanel = $(panelId); if (modalPanel && modalPanel.component) { var component = modalPanel.component; var div = component.getSizedElement(); if (hide) { Element.hide(div); } effectFunc.call(this, Object.extend( {targetId : div.id}, params || {}));}} } function showModalPanelWithEffect(panelId, showEffect, params) { applyModalPanelEffect(panelId, showEffect, params, true); } function hideModalPanelWithEffect(panelId, hideEffect, params) { var _params = params; _params['afterFinish'] = function(){Richfaces.hideModalPanel(panelId)}; applyModalPanelEffect(panelId, hideEffect, params, false); }
Now the dialog call showModalPanelWithEffect to fade-in and hideModalPanelWithEffect to fade-out.
Try it 😀
Antworten
Du musst angemeldet sein, um einen Kommentar abzugeben.