实现页面弹出框

7 篇文章 0 订阅

    权限系统分到的任务是:分栏和页面弹出框,开始感觉这两个任务都不难,因为在jQuery的视频中讲到过,所以找到了之前自己完成的实例脑补了一下,分栏的确是比较简单的,那么就来说一下关于页面弹出框的问题吧.

    开始没多想,就简单的根据实例完成了自己需要的弹出框(达到的效果:点击按钮在页面中间弹出框,并且弹出框可以根据浏览器的大小而改变位置,始终保持在页面中间显示)

html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>窗口显示-陈丽娜</title>
<link rel="stylesheet" type="text/css" href="css/window.css">
<script type="text/javascript" src='js/jquery.js'></script>
<script type="text/javascript" src='js/window-2.js'></script>
</head>
<body>   
    <!-- ///* <input type="button" value="左下角显示窗口" id="leftpop"/>*/-->
      <input type="button" value="弹窗" id="conterpop"/>
    </p>
    <div class="window" id="center">
	    <div class="title">
		    添加模块
			  <img src="image/close.gif" alt="关闭" />		</div>
		<div class="content">
		       <table class="pageFormContent" >                
                <tr class="dialogContent" >
                    <td class="dialoglable">模块名称:</td>
                    <td ><input name="md" type="text" size="30" /></td>
                </tr>
                <tr>
                    <td class="dialoglable">所属模块:</td>
                    <td >
                        <select name="model" class="required combox">
                        <option value ="">请选择</option>
                       </select>
                    </td>                        
                </tr>
                <tr><td class="dialoglable">英文标识:</td>
                    <td >
                        <input name="mdId" type="text" size="30" />
                    </td>
                </tr> 
                 <tr><td class="dialoglable">排序号:</td>
                    <td><input name="LevelId" type="text" size="30" /></td>
                </tr> 
                <tr><td class="dialoglable">关联组织:</td>
                    <td >
                        <select name="orgName" class="required combox">
                        <option value ="">请选择</option>
                        </select>
                    </td>
                </tr>
                 <tr><td class="dialoglable">所属类型:</td>
                     <td >
                    <select name="typeName" class="required combox">
                        <option value ="">请选择</option>
                    </select>
                     </td>
                </tr>
                <tr><td class="dialoglable">描述:</td>
                    <td >
                    <textarea rows="5"  name="remark" style="width: 295px" ></textarea>
                    </td>
                </tr> 
                <tr class="bar">
                    <td colspan="2" class="dialogBar">
                        <input id="button" type="button" value="保存" class="dialogbutton"  />
                        <input id="Reset1" type="reset" value="重置" class="dialogbutton"/>
                        <input id="dialogcancel" type="submit" value="取消" class="dialogbutton"/>
                    </td>                    
                </tr>              
            </table>
		</div>
	</div>
<body>
</html>

css:

.window{
	background-color: #99FFCC;
	width:430px;	
	margin:5px;
	padding:2px;
	/*位置绝对定位*/
	 position:absolute;
	left: 277px;
	top: 491px;
	display:none;
}
.content{
      height:360px;
	  background-color:#FFFFFF;
	  border:2px solid  #99FFCC;
	  /*滚动条显示*/
	  overflow:auto;	
	  clear:both;
}
 .title img{
      float:right;
	  cursor:pointer;
 }
.title{
   padding:2px;  
   
}

js:

// JavaScript Document
$(document).ready(function(){
		//1点击按钮可以再屏幕中间显示一个窗口
		//2点击按钮2可以再屏幕左下角显示一个窗口
		//3页面加载完成后再屏幕右下角飘一个窗口,吗并且窗口慢慢淡出
		//点击关闭按钮,窗体关闭
	/*$(".title img").click(function(){
		$(this).parent().parent().hide("slow");
	});*/
	var centerwin=$("#center").mywin({left:"center",top:"center"});
	/*var leftwin=$("#left").mywin({left:"left",top:"bottom"},function(){leftwin.slideUp("slow");});*/
	
	$("#conterpop").click(function(){
		   //鼠标点击按钮之后,把id为center的窗口显示在页面中间
		   //计算位于屏幕中间的窗口的左边界和上边界的值
		   //浏览器可视区的宽和高,当前窗口的宽和高
		   //考虑滚动条的上下左右边界问题
		   //如何获得滚动条的边界值		 
		   centerwin.show("slow");
	});
	
 });


///封装插件  
$.fn.mywin=function(position, hidefunc){
	
	if(position && position instanceof Object){
		var positionleft=position.left;
		var positiontop=position.top;
		
		var windowobj=$(window);
		var currentwin=this;
		var cwinwidth=this.outerWidth(true);
		var cwinheight=this.outerHeight(true);
		var left;
		var top;			
		var scrollleft;
		var scrolltop;
		var browserwidth;
		var browserheight;
		
		//计算浏览器当前可是区域的宽和高,以及滚动条左上边界
		function getWinDin(){
			 scrollleft=$(window).scrollLeft();
			 scrolltop=$(window).scrollTop();
			 browserwidth=$(window).width();
			 browserheight=$(window).height();
		}	
	
		//计算窗口真的左边界的值
		function calLeft(positionleft,scrollleft,browserwidth,cwinwidth){
		if(positionleft && typeof positionleft=="string"){
			if(positionleft=="center"){
				left=scrollleft+(browserwidth-cwinwidth)/2;
			}else if(positionleft=="left"){
				left=scrollleft;
			}else if(positionleft=="right"){
				left=scrollleft+browserwidth-cwinwidth;
			}
		}
		//缓存数据
		currentwin.data("positionleft",positionleft);
		}
	
		//计算窗口真实的上边界值
		function callTop(positiontop,scrolltop,browserheight,cwinheight){
		if(positiontop && typeof positiontop=="string"){
			if(positiontop=="center"){
			    top=scrolltop+(browserheight-cwinheight)/2;	
			}else if(positiontop=="top"){
				top=scrolltop;
			}else if(positiontop=="bottom"){
				top=scrolltop+browserheight-cwinheight;
			}
		}	
		//缓存数据
		currentwin.data("positiontop",positiontop);
		}
		//窗体位置改变
		function moveWin(){
			calLeft(currentwin.data("positionleft"),scrollleft,browserwidth,cwinwidth);
				callTop(currentwin.data("positiontop"),scrolltop,browserheight,cwinheight);	
				currentwin.animate({left:left,top:top},300);
				  
			
}
		//浏览器滚动条滚动时,移动窗口的位置
		var scrollTimeout;
		$(window).scroll(function(){	
			clearTimeout(scrollTimeout);
			scrollTimeout=setTimeout(function(){
				getWinDin();
				moveWin();
			 },300);
		});
		//浏览器大小改变时,移动窗口的位置
		$(window).resize(function(){
			getWinDin();
			moveWin();
		});
		
	    //关闭弹出框
		currentwin.children(".title").children("img").click(function(){
		    if(!hidefunc){
				currentwin.hide("slow");
			}else{
				hidefunc();
			}
	 });	
		getWinDin();
		calLeft(positionleft,scrollleft,browserwidth,cwinwidth);
		callTop(positiontop,scrolltop,browserheight,cwinheight);
		currentwin.css("left",left).css("top",top);
		
	//返回当前对象,以便于可以级联的执行其他方法
	return this;
		
	}	
}


 

然而这个弹出框是实现了,但是弹出框并不能跟随着鼠标的移动而移动,为了用户体验性更好,所以要求进行改变,在上面实例的基础上做修改是没办法完成的,因为已经固定弹出框是在页面中间显示了,所以查了一些其他的方法,其中一个比较简单的方法就是利用jquery ui封装好的dialog方法:

html:基本和上一个的html是一样的,只是改变一下div的类名:

<!doctype html>
<html lang="en">
<head>
	<meta charset="gbk" />
  <title>jQuery UI Dialog - Default functionality</title>
  <link rel="stylesheet" href="./css/jquery-ui.css" />
  <script src="./js/jquery-1.9.1.js"></script>
  <script src="./js/jquery-ui.js"></script>
  <link rel="stylesheet" href="./css/style.css" />
  <script type="text/javascript">
  
  function dialogOpen()
  {
      $(function () {
          $("#dialog").dialog();
      });
  }
  </script>
</head>
<body>
    <input type="button" id="btnAdd" value="弹窗" onClick="dialogOpen();" />
<div id="dialog" title="添加模块" style="display:none">
     table部分省略
       
</div> 
</body>
</html>



只需要引用juqery ui封装好的jscss就可以完成弹出框,然而不是很满意的地方就是这个弹出框的效果图:

 

 

    标题的背景图是灰色与整个系统并不协调,所以需要改正,一种方法是去jquery ui的官网去下载皮肤,由于我的英文不是很好没有找到下载地址,看来还要好好学英语要;另一种方法就是修改jquery uicss,在代码调试窗口查清楚标题栏的类名,在jquerycss中进行背景色的调整即可完成。 

    这两种实现方法一个比较原始,是自己通过js敲出来的,一个是用封装好的方法,两种方法实现的效果虽然太相同,但是也大同小异。其实第一中方法也可以封装成一个js,在以后需要的时候调用即可。

虽然都不是什么难点,但是一步一步的实现还是花费了我一段时间的,不过以后遇到这个就不用再担心了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值