HTML页面居中弹出自定义窗口层(实现可拖拽)

使用DIV弹出窗口来动态显示内容的原理:首先采用CSS和HTML隐藏弹窗中的内容,然后利用JavaScript(本教程中是JQuery)来动态显示它们。这种效果不仅能够充分利用有限的版面空间,而且能够提高用户体验;更重要的是,它并不影响SEO效果(因为它实际存在于页面中,只是初始为不可见状态)

1、在html页面中定义一个div,并在div实现我们需要展示的内容。

  <body>
	<div id="login">
		<h2><img src="images/close.png" alt="" class="close" />网站登录</h2>
		<form id="loginForm" >
		<div class="info"></div>
		<div class="user">帐 号:<input type="text" name="user" class="text" /></div>
		<div class="pass">密 码:<input type="password" name="pass" class="text" /></div>
		<div class="button"><input type="button" name="sub" class="submit" value="" /></div>
		</form>
		<div class="other">注册新用户 | 忘记密码?</div>
	</div>
  </body>

一图抵千言。让我们看看这个DIV弹出窗口的效果截图:

2、我所用的CSS样式

#login {
	width:350px;
	height:250px;
	border:1px solid #ccc;
	position:absolute;
	display:block;
	z-index:9999;
	background:#fff;
}
#login h2 {
	height:40px;
	line-height:40px;
	text-align:center;
	font-size:14px;
	letter-spacing:1px;
	color:#666;
	background:url(images/login_header.png) repeat-x;
	margin:0;
	padding:0;
	border-bottom:1px solid #ccc;
	cursor:move;
}
#login h2 img {
	float:right;
	position:relative;
	top:14px;
	right:8px;
	cursor:pointer;
}
#login div.info {
	padding:10px 0 5px 0;
	text-align:center;
	color:maroon;
}
#login div.user, #login div.pass {
	font-size:14px;
	color:#666;
	padding:5px 0;
	text-align:center;
}
#login input.text {
	width:200px;
	height:25px;
	border:1px solid #ccc;
	background:#fff;
	font-size:14px;
}
#login .button {
	text-align:center;
	padding:15px 0;
}
#login input.submit {
	width:107px;
	height:30px;
	background:url(images/login_button.png) no-repeat;
	border:none;
	cursor:pointer;
}
#login .other {
	text-align:right;
	padding:15px 10px;
	color:#666;
}

这里面主要注意的是关于div样式的定义,因为需要居中展示我们使用绝对定位position:absolute;其次因为是弹出层,div必须在最外围,所以通常把z-index设置的非常大,这里我们设置为z-index:9999;还有一点是关于div本身是隐藏的需要设置为display:none,但这里我们需要直接看效果所以直接让它展现使用display:block;

3、我们需要让它居中展示,那么首先就必须获取浏览器的高度和宽度,如果有滚动条的水平或者竖向偏移,还需要获取那个长度,通过计算获取div应该浏览器的位置。

$(document).ready(function()
{
		jQuery.fn.extend({
			center:function(width,height)
			{
				return $(this).css("left", ($(window).width()-width)/2+$(window).scrollLeft()).
				css("top", ($(window).height()-height)/2+$(window).scrollTop()).
				css("width",width).
				css("height",height);
			}
		});

});

通过点击按钮让它展现

	$(".login").click(function ()
	{
		$("#login").show().center(350,250);//展现登陆框
	});

效果图

4、能对弹出框进行拖拽

代码实现

$(document).ready(function()
{
		jQuery.fn.extend({
			//拖拽功能
			drag:function(){
				var $tar = $(this);
				return $(this).mousedown(function(e){
					if(e.target.tagName =="H2"){
						var diffX = e.clientX - $tar.offset().left;
						var diffY = e.clientY - $tar.offset().top;
						$(document).mousemove(function(e){
							var left = e.clientX - diffX;
							var top = e.clientY - diffY;
							if (left < 0){
								left = 0;
							}
							else if (left <= $(window).scrollLeft()){
								left = $(window).scrollLeft();
							}
							else if (left > $(window).width() +$(window).scrollLeft() - $tar.width()){
								left = $(window).width() +$(window).scrollLeft() -$tar.width();
							}
							if (top < 0){
								top = 0;
							}
							else if (top <= $(window).scrollTop()){
								top = $(window).scrollTop();
							}
							else if (top > $(window).height() +$(window).scrollTop() - $tar.height()){
								top = $(window).height() +$(window).scrollTop() - $tar.height();
							}
							$tar.css("left",left + ‘px‘).css("top",top + ‘px‘);
						});
					}
					$(document).mouseup(function(){
						$(this).unbind("mousemove");
						$(this).unbind("mouseup")
					});
				});
			}
		});

});

这里我们只针对div内容中的H2元素可供点击拖拽,如果需要全局div可进行修改,拖拽原理:当鼠标在指定元素上的按下时,获取该鼠标点坐标,通过计算,把图片也移动到相对应的位置,一旦鼠标点击取消,相对应的按下事件也随之取消,页面静止。

调用拖拽方法

$("#login").drag();

现在我们可以点击弹出框的标题栏随意对其在浏览器中拖拽了。

效果地址

点击 登录 或 注册

HTML页面居中弹出自定义窗口层(实现可拖拽),布布扣,bubuko.com

时间: 2024-07-30 13:43:04

HTML页面居中弹出自定义窗口层(实现可拖拽)的相关文章

ArcGIS api fo silverlight学习三(利用ElementLayer实现鼠标悬浮弹出自定义窗体)

接着上一节继续学习,本节主要是利用ElementLayer实现鼠标悬浮弹出自定义窗体 参考博文:http://www.cnblogs.com/luxiaoxun/p/3322218.html 一.新建silverlight用户控件 自定义窗体,可以放置很多控件,命名为MyMapTip.xaml,代码为: <Grid x:Name="LayoutRoot" Width="400" Height="100" Background="T

右键弹出自定义菜单,很有意思呀!

<HTML><HEAD><TITLE>右键菜单</TITLE> <SCRIPT language="javascript"> <!-- function showmenuie5(){ var rightedge=document.body.clientWidth-event.clientX var bottomedge=document.body.clientHeight-event.clientY if (righte

HTML中心在页面上弹出自定义表单层(实现可能拖累)

使用DIV窗体来动态显示内容的原理:首先採用CSS和HTML隐藏弹窗中的内容,然后利用JavaScript(本教程中是JQuery)来动态显示它们.这样的效果不仅可以充分利用有限的版面空间,并且可以提高用户体验:更重要的是,它并不影响SEO效果(由于它实际存在于页面中.仅仅是初始为不可见状态) 1.在html页面中定义一个div,并在div实现我们须要展示的内容. <body> <div id="login"> <h2><img src=&qu

Qt窗口添加鼠标移动拖拽事件

1. .h文件中添加 private:    QPoint dragPosition; 2. 在cpp文件中重写鼠标点击和拖拽函数 void ShapeWidget::mousePressEvent(QMouseEvent * event){    if (event->button() == Qt::LeftButton) //点击左边鼠标    {         dragPosition = event->globalPos() - frameGeometry().topLeft(); 

【WPF】总结窗口和控件拖拽的实现

前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的拖动. 希望本文能对一些寻找此问题的解决方法的人和一些刚入门的人一些帮助.笔者为WPF初学者,能得到各位的批评指正也是荣幸万分.有更好更多的方法,劳烦与我分享,不胜感激. 本文的各种实现方法其他博客中也都有提及,很多文章内容详实,有图有代码,笔者就不重复造轮子了.就写写自己的一些理解吧. 关键词 Window, UserControls, drag, Thumb 参考资料 http://www.cnblog

HTML页面弹出自定义对话框带遮蔽罩(使用JavaScript)

转载:http://blog.sina.com.cn/s/blog_610f47c50100ohe4.html 原理其实很简单:首先绘制弹出的自定义对话框,将其使用display:none隐藏,因为设置为none,其在页面中并不占用空间: 遮蔽罩使用一个div,然后将其宽高设置为整个显示窗口大小,配置其透明度,在将其z-index属性大于主页面的z-index的值,也就是遮蔽层在主页面上方,如此即可 事先隐藏一个div,在需要的时候调出显示既可. <!--以下代码从网上多处学习整合而成,由于来源

JS怎样捕获浏览器关闭时间弹出自定义对话框

<script type="text/javascript">window.onbeforeunload = function (e) { e = e || window.event; // 兼容IE8和Firefox 4之前的版本 if (e) { e.returnValue = '关闭提示'; } // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+ return '关闭提示';};</script>

Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏

最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉.感觉自己在荒废时间,也感觉自己在浪费生命. 为了让自己在被抛弃的时候可以有一个养家糊口的工作,现在也得加深一下自己的技能了.给自己一个小目标,先把网易云音乐的界面实现了,其实这个是我很好的愿望了,只是自己懒得动,一直拖到现在. 先放一个参考依据 我们就以这个为主要,先来实现主界面,这里由于没有现成的素材,我也懒得去找相似素材,就展现我的PS渣渣技术了,全程资

nw.js FrameLess Window下的窗口拖拽与窗口大小控制

nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候,我们觉得系统的Frame框很难看,于是想自定义. 自定义Frame的第一步是在package.config文件中将frame选项设置为false. { "name": "1", "main": "index.html", "nodejs": true, "single-instance": false, &