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 扩展方法
May 06 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
node.js中的fs.rmdirSync方法使用说明
Dec 16 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
老生常谈JavaScript 正则表达式语法
Aug 20 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
让div运动起来 js实现缓动效果
Jul 06 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
Angular8 实现table表格表头固定效果
Jan 03 Javascript
Node.js API详解之 V8模块用法实例分析
Jun 05 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
PHP内核探索:变量概述
2014/01/30 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
windows下ipython的安装与使用详解
2016/10/20 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
Python变量访问权限控制详解
2019/06/29 Python
django删除表重建的实现方法
2019/08/28 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
什么是servlet
2012/05/08 面试题
装修致歉信
2014/01/15 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
党员干部一句话承诺
2014/05/30 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
导游词欢迎词
2015/02/02 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书