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实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
JavaScript lodash常见用法系列小结
Aug 24 Javascript
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
微信小程序实现录音Record功能
May 09 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
删除无限级目录与文件代码共享
2006/07/12 PHP
PHP5中MVC结构学习
2006/10/09 PHP
PHP中ADODB类详解
2008/03/25 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
javascript 表单验证常见正则
2009/09/28 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
python实现Windows电脑定时关机
2018/06/20 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
django中嵌套的try-except实例
2020/05/21 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
.net工程师笔试题
2012/06/09 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
学生个人自我鉴定
2014/03/26 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
音乐节策划方案
2014/06/09 职场文书
单位委托书怎么写
2014/08/02 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
毕业实习计划书
2015/01/16 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA