HTML页面弹出居中可拖拽的自定义窗口层


Posted in Javascript onMay 07, 2014

使用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弹出窗口的效果截图:
HTML页面弹出居中可拖拽的自定义窗口层 
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);//展现登陆框 
});

效果图
HTML页面弹出居中可拖拽的自定义窗口层 
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();

现在我们可以点击弹出框的标题栏随意对其在浏览器中拖拽了。
Javascript 相关文章推荐
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
May 23 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
js获取select默认选中的Option并不是当前选中值
May 07 #Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 #Javascript
jquery文本框中的事件应用以输入邮箱为例
May 06 #Javascript
jquery删除数据记录时的弹出提示效果
May 06 #Javascript
js单词形式的运算符
May 06 #Javascript
js函数调用的方式
May 06 #Javascript
js使用ajax读博客rss示例
May 06 #Javascript
You might like
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
js URL参数的拼接方法比较
2012/02/15 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Django的Modelforms用法简介
2019/07/27 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
小学数学教研活动总结
2014/07/01 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书