ASP.NET&Javascript实现半透明背景&模式弹出个性化页面实例


    开发Web应用时,经常会有弹出模式对话框的情况,可以直接调用window.showModalDialog()方法,一般情况就可以了。

 

    但有一些应用场景,需要我们弹出一些自定义控件或页面,同时用一层半透明的背景将页面的其他地方遮住,以防止用户的其他操作,以达到一种“模式窗口”的效果,这里给出一个实现此类效果,同时支持弹出自定义控件页面中通过委托更新主页面的操作功能,当然,此应用支持IE和FireFox两种浏览器。

 

  ASP.NET&Javascript实现半透明背景&模式弹出个性化页面实例

 

    详细代码脚本及页面代码如下:

 

a)         CSS样式:Base.css文件

1      div.Container { width:700px; min - height:300px; border:solid 1px # 003366 ; background - image:url( / images / PopupBG.gif); background - repeat:repeat - x; background - color:#d9e1e8; }
2      div.Content { width:640px; min - height:280px; margin - left:30px; margin - top:20px; }
3      div.ShieldBG { background - color:Gray; filter:alpha(opacity = 50 );  - moz - opacity: 0.5 ; opacity: 0.5 ;}
4      div.ItemRow { display:inline; }


      b)         Javascript脚本:PositionCaculate.js文件

  1           //
  2           //  Object for parameters.
  3          var MemberParameters  =  {
  4           //  Id of container div.
  5          ContainerDivId:  " div_Container " ,
  6           //  Id of ShieldBG.
  7          ShieldBGId :  " div_ShieldBG " ,
  8           //  Class Name of ShieldBG.
  9          ShieldBGClassName:  " ShieldBG " ,
 10           //  Number of z-index of ShieldBG.
 11          ShieldBGZIndex:  100 ,
 12           //  Whether scroll tag.
 13          IsScroll:  false ,
 14           //  Default space for pop-up layout to left and top.
 15          DefaultSpace:  50
 16          };
 17 
 18           //
 19           //  Object for logical modules.
 20          var LogicalModules  =  {
 21               //
 22               //  Show up the content layout.
 23              PopUpContainerDiv: function() {
 24                   //  Init.
 25                  var objContainerDiv  =  document.getElementById(MemberParameters.ContainerDivId);
 26                   //  Check.
 27                   if  (objContainerDiv  ==   null   ||  objContainerDiv.parentNode  ==   null )
 28                       return   false ;
 29                   //  Set the style of container.
 30                  objContainerDiv.style.position  =   " absolute " ;
 31                  objContainerDiv.style.zIndex  =  MemberParameters.ShieldBGZIndex  +   1 ;
 32                   //  Show the content layout.
 33                  objContainerDiv.style.display  =   "" ;
 34                   //  Show up orCreate a new bg div and set the style.
 35                  var objShieldBg  =  document.getElementById(MemberParameters.ShieldBGId);
 36                   if  (objShieldBg  !=   null ) {
 37                      objShieldBg.style.display  =   "" ;
 38                  }  else  {
 39                      var objNewDiv  =  document.createElement( " DIV " );
 40                      objNewDiv.setAttribute( " id " , MemberParameters.ShieldBGId);
 41                      objNewDiv.style.position  =   " absolute " ;
 42                      objNewDiv.style.zIndex  =  MemberParameters.ShieldBGZIndex;
 43                      objNewDiv.style.top  =   " 0px " ;
 44                      objNewDiv.style.left  =   " 0px " ;
 45                       //  Set the class name.
 46                      objNewDiv.className  =  MemberParameters.ShieldBGClassName;
 47                       //  Append it.
 48                      objContainerDiv.parentNode.appendChild(objNewDiv);
 49                  }
 50                   //
 51                   //  Caculate the width and height.
 52                   this .CaculateWidthAndHeight();
 53                   /// / If you want to keep the layout on the changeless position, use this.
 54                   //  Add the reflesh events.
 55                   //                 this.AddScrollEvent();
 56                   /// /
 57              },
 58               //
 59               //  Hide the content layout.
 60              HideContainerDiv: function() {
 61                  var objContainerDiv  =  document.getElementById(MemberParameters.ContainerDivId);
 62                  var objShieldBg  =  document.getElementById(MemberParameters.ShieldBGId);
 63                   if  (objContainerDiv  ==   null   ||  objShieldBg  ==   null )
 64                       return   false ;
 65                  objContainerDiv.style.display  =   " none " ;
 66                  objShieldBg.style.display  =   " none " ;
 67                   /// / If you want to keep the layout on the changeless position, use this.
 68                   //  Remove the reflesh events.
 69                   //                 this.RemoveScrollEvent();
 70                   /// /
 71              },
 72               //
 73               //  Caculate the widht and height.
 74              CaculateWidthAndHeight: function() {
 75                   //  Defind.
 76                  var clientWidth  =  document.documentElement.clientWidth;
 77                  var clientHeight  =  document.documentElement.clientHeight;
 78                   //  Get the objs.
 79                  var objContainer  =  document.getElementById(MemberParameters.ContainerDivId);
 80                  var objShieldBg  =  document.getElementById(MemberParameters.ShieldBGId);
 81                   if  (objContainer  ==   null   ||  objShieldBg  ==   null )
 82                       return   false ;
 83                   //  Bg width and height.
 84                  var bgWidth  =  Math.max(Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), clientWidth);
 85                  var bgHeight  =  Math.max(document.body.scrollHeight, clientHeight);
 86                   //  Container width and height.
 87                  var containerWidth  =  (clientWidth  -  objContainer.clientWidth)  /   2 ;
 88                  var containerHeight  =  (clientHeight  -  objContainer.clientHeight)  /   2 ;
 89                   //  Adjust the values.
 90                   if  (containerWidth  <   0 )
 91                      containerWidth  =  MemberParameters.DefaultSpace;
 92                   if  (containerHeight  <   0 )
 93                      containerHeight  =  MemberParameters.DefaultSpace;
 94                   //  Check the container's width and height.
 95                   if  (objContainer.clientHeight  >  bgHeight)
 96                      bgHeight  =  containerHeight  +  objContainer.clientHeight  +  MemberParameters.DefaultSpace;
 97                   if  (objContainer.clientWidth  >  bgWidth)
 98                      bgWidth  =  containerWidth  +  objContainer.clientWidth  +  MemberParameters.DefaultSpace;
 99                   //  Update the IsScroll status.
100                   if  (bgHeight  >  clientHeight  ||  bgWidth  >  clientWidth) {
101                      MemberParameters.IsScroll  =   true ;
102                      bgHeight  +=  MemberParameters.DefaultSpace;
103                  }
104                   //  Set values.
105                  objContainer.style.left  =  containerWidth  +   " px " ;
106                  objContainer.style.top  =  containerHeight  +   " px " ;
107                  objShieldBg.style.width  =  bgWidth  +   " px " ;
108                  objShieldBg.style.height  =  bgHeight  +   " px " ;
109              },
110               //
111               //  Set the event to reflesh the pop-up layout.
112              AddScrollEvent: function() {
113                   if  (MemberParameters.IsScroll) {
114                      AssistantFunctions.AddEvent(window,  " onscroll " this this .CaculateWidthAndHeight);
115                      AssistantFunctions.AddEvent(window,  " onresize " this this .CaculateWidthAndHeight);
116                  }
117              },
118               //
119               //  Remove the events to reflesh the pop-up layout.
120              RemoveScrollEvent: function() {
121                   if  (MemberParameters.IsScroll) {
122                      AssistantFunctions.RemoveEvent(window,  " onscroll " this this .CaculateWidthAndHeight);
123                      AssistantFunctions.RemoveEvent(window,  " onresize " this this .CaculateWidthAndHeight);
124                  }
125              }
126          };
127 
128           //
129           //  Objects for assistant functions.
130          var AssistantFunctions  =  {
131               //
132               //  Add Event to window.
133              AddEvent: function(obj,  event , source, func) {
134                   if  (obj.attachEvent) {
135                       //  IE.
136                      obj.attachEvent( event , function() { func.apply(source, arguments); });
137                  }
138                   else  {
139                       //  FF.
140                      obj.addEventListener( event , func,  false );
141                  }
142              },
143               //
144               //  Remove Event from window.
145              RemoveEvent: function(obj,  event , source, func) {
146                   if  (obj.detachEvent) {
147                       //  IE.
148                      obj.detachEvent( event , func);
149                  }
150                   else  {
151                       //  FF.
152                      obj.removeEventListener( event , func,  false );
153                  }
154              }
155          };
156 
157           //
158           //  Objects for app invoke.
159          var AppInvokes  =  {
160               //
161               //  Pop up the layout contain some content.
162              PopUpContainerDiv: function() {
163                  LogicalModules.PopUpContainerDiv();
164              },
165               //
166               //  Hide the layout.
167              HideContainerDiv: function() {
168                  LogicalModules.HideContainerDiv();
169              }
170          };
171          
172           //
173           //  Object for tests.
174          var AppTests  =  {
175              
176          };


c)         主页面:Default.aspx文件及后台

 

                         i.              前台:

 1  <% @ Page Language = " C# "  AutoEventWireup = " true "  CodeBehind = " Default.aspx.cs "  Inherits = " WebAppForCustomControlTest._Default "   %>
 2 
 3  <! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
 4 
 5  <% @ Register Src = " ~/WebUserControlFir.ascx "  TagName = " NewControl "  TagPrefix = " uu1 "   %>
 6 
 7  < html xmlns = " http://www.w3.org/1999/xhtml "   >
 8  < head runat = " server " >
 9       < title > Web Custom Control Test </ title >
10       < link type = " text/css "  href = " Css/Base.css "  rel = " Stylesheet "   />
11       < script src = " Javascript/PositionCalculate.js "  type = " text/javascript " ></ script >
12       < script type = " text/javascript " >
13 
14          function UpdateReturnStr(sReturn) {
15              var objText  =  document.getElementById( " txtReturnStr " );
16               if  (objText  !=   null ) {
17                  objText.value  =  sReturn;
18              }
19          }
20      
21       </ script >
22  </ head >
23  < body >
24       < form id = " form1 "  runat = " server " >
25           < asp:ScriptManager ID = " SM "  runat = " server " ></ asp:ScriptManager >
26           < div >
27               < label > Client Return Value:  </ label >
28               < input type = " text "  id = " txtReturnStr "  value = " No Return, Client! "   />
29               < asp:UpdatePanel ID = " upd_Result "  runat = " server "  UpdateMode = " Conditional " >
30                   < ContentTemplate >
31                       < asp:Label Text = " Server Return Value: "  runat = " server " ></ asp:Label >
32                       < asp:TextBox ID = " txtReturnStrSvr "  Text = " No Return, Server! "  runat = " server " ></ asp:TextBox >
33                   </ ContentTemplate >
34               </ asp:UpdatePanel >
35               < input type = " button "  value = " Click Me to Pop-up New Layout "  onclick = " AppInvokes.PopUpContainerDiv() "   />
36           </ div >
37           < div id = " div_Container "  style = "  display:none; "   class = " Container " >
38               < div  class = " Content " >
39                   < asp:UpdatePanel ID = " upd_PopUpControl "  runat = " server " >
40                       < ContentTemplate >
41                           < uu1:NewControl ID = " wuc_PopUpControl "  runat = " server "   />
42                       </ ContentTemplate >
43                   </ asp:UpdatePanel >
44               </ div >
45           </ div >
46       </ form >
47  </ body >
48  </ html >
49 


                         ii.              后台:

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Web;
 5  using  System.Web.UI;
 6  using  System.Web.UI.WebControls;
 7 
 8  namespace  WebAppForCustomControlTest
 9  {
10       public   partial   class  _Default : System.Web.UI.Page
11      {
12           protected   void  Page_Load( object  sender, EventArgs e)
13          {
14               //  init the web user control.
15              wuc_PopUpControl.PopUpScript  =   " AppInvokes.PopUpContainerDiv() " ;
16              wuc_PopUpControl.HideScript  =   " AppInvokes.HideContainerDiv() " ;
17              wuc_PopUpControl.ReturnContent  +=   new  WebUserControlFir.ReturnEventHandler(wuc_PopUpControl_ReturnContent);
18          }
19 
20           private   void  wuc_PopUpControl_ReturnContent( object  source, ReturnClass rc)
21          {
22               if  (rc  !=   null   &&   ! string .IsNullOrEmpty(rc.Name)  &&   ! string .IsNullOrEmpty(rc.Value))
23              {
24                  txtReturnStrSvr.Text  =   string .Format( " {0}:{1} " , rc.Name, rc.Value);
25                  upd_Result.Update();
26              }
27          }
28      }
29  }


d)         自定义控件:WebUserControlFir.ascx文件及后台

 

                         i.              前台:

 1  <% @ Control Language = " C# "  AutoEventWireup = " true "  CodeBehind = " WebUserControlFir.ascx.cs "  Inherits = " WebAppForCustomControlTest.WebUserControlFir "   %>
 2  < script type = " text/javascript " >
 3      function GetInputValue() {
 4          var objInput  =  document.getElementById( " <%=txtInput.ClientID%> " );
 5           if  (objInput  !=   null )
 6              UpdateReturnStr(objInput.value);
 7      }
 8  </ script >
 9 
10  < div >
11       < label > This  is  a test web custom control, so  if  you see  this  page, you have pop up  this  control. </ label >
12       < br  />
13       < br  />
14       < asp:TextBox ID = " txtInput "  runat = " server "  Text = ""  Width = " 150px "  TextMode = " SingleLine " ></ asp:TextBox >
15       < br  />
16       < asp:Button ID = " btnClose "  runat = " server "  Text = " Return String Server "  OnClick = " OnClick_btnClose "   />
17       < br  />
18       < asp:Button ID = " btnChangeContent "  runat = " server "  Text = " ChangeListContent "  OnClick = " OnClick_btnChangeContent "   />
19       < br  />
20       < input type = " button "  id = " btnCloseClient "  value = " Return String Client "  onclick = " GetInputValue() "   />
21       < asp:Label ID = " labProcResult "  Text = ""  runat = " server " ></ asp:Label >
22       < br  />
23       < asp:ListView ID = " livData "  runat = " server " >
24           < ItemTemplate >
25               < div >
26                   < div  class = " ItemRow " >
27                       < asp:Label ID = " labName "  runat = " server "  Text = ' <%#Eval("Name")%> ' ></ asp:Label >
28                   </ div >
29                   < div  class = " ItemRow " >
30                       < asp:Label ID = " labAddress "  runat = " server "  Text = ' <%#Eval("Address") %> ' ></ asp:Label >
31                   </ div >
32                   < div  class = " ItemRow " >
33                       < asp:Label ID = " labPhone "  runat = " server "  Text = ' <%#Eval("Phone") %> ' ></ asp:Label >
34                   </ div >
35               </ div >
36           </ ItemTemplate >
37           < LayoutTemplate >
38               < div >
39                   < div >
40                       < div  class = " ItemRow " > Name </ div >
41                       < div  class = " ItemRow " > Address </ div >
42                       < div  class = " ItemRow " > Phone </ div >
43                   </ div >
44                   < div >
45                       < div id = " itemPlaceholder "  runat = " server " ></ div >
46                   </ div >
47               </ div >
48           </ LayoutTemplate >
49       </ asp:ListView >
50  </ div >


                         ii.              后台:

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Web;
 5  using  System.Web.UI;
 6  using  System.Web.UI.WebControls;
 7 
 8  namespace  WebAppForCustomControlTest
 9  {
10       public   partial   class  WebUserControlFir : System.Web.UI.UserControl
11      {
12           public   delegate   void  ReturnEventHandler( object  source, ReturnClass rc);
13           public   event  ReturnEventHandler ReturnContent;
14 
15           public   string  HideScript {  set get ; }
16           public   string  PopUpScript {  set get ; }
17 
18           protected   void  Page_Load( object  sender, EventArgs e)
19          {
20              List < PersonClass >  Persons  =   new  List < PersonClass > ();
21               for  ( int  i  =   0 ; i  <   8 ; i ++ )
22              {
23                  PersonClass p  =   new  PersonClass() { Name  =   " User " , Address  =   " Beijing " , Phone  =   " 01000000000 "  };
24                  Persons.Add(p);
25              }
26 
27              livData.DataSource  =  Persons;
28              livData.DataBind();
29          }
30 
31           protected   void  OnClick_btnClose( object  sender, EventArgs e)
32          {
33              labProcResult.Text  =   " Great, you've send the string you input to the main page! " ;
34               string  InputStr  =  txtInput.Text;
35               if  ( ! string .IsNullOrEmpty(InputStr))
36              {
37                  ReturnClass rc  =   new  ReturnClass();
38                  rc.Name  =  txtInput.ID;
39                  rc.Value  =  InputStr;
40                  ReturnContent( this , rc);
41                  ScriptManager.RegisterStartupScript(labProcResult, labProcResult.GetType(),  " ReturnAndClose " , HideScript,  true );
42              }
43          }
44 
45           protected   void  OnClick_btnChangeContent( object  sender, EventArgs e)
46          {
47              List < PersonClass >  Persons  =   new  List < PersonClass > ();
48               for  ( int  i  =   0 ; i  <   70 ; i ++ )
49              {
50                  PersonClass p  =   new  PersonClass() { Name = " User " , Address = " Beijing " , Phone = " 01000000000 " };
51                  Persons.Add(p);
52              }
53 
54              livData.DataSource  =  Persons;
55              livData.DataBind();
56 
57              ScriptManager.RegisterStartupScript(labProcResult, labProcResult.GetType(),  " Reload " , PopUpScript,  true );
58          }
59      }
60 
61       public   class  PersonClass
62      {
63           public   string  Name {  set get ; }
64           public   string  Address {  set get ; }
65           public   string  Phone {  set get ; }
66      }
67  }


工程源代码下载链接如下:

/Files/guilin_gavin/WebAppForCustomControlTest.rar 

 

你可能感兴趣的:(JavaScript)