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表单验证插件formValidator(改进版)
Feb 03 Javascript
jquery live()重复绑定的解决方法介绍
Jan 03 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
微信小程序开发经验总结(推荐)
Jan 11 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 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/11/18 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
Python实现堆排序的方法详解
2016/05/03 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
Python探索之Metaclass初步了解
2017/10/28 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
Python中格式化字符串的四种实现
2020/05/26 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
局域网定义和特性
2016/01/23 面试题
20岁生日感言
2014/01/13 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
医师定期考核实施方案
2014/05/07 职场文书
设备管理实施方案
2014/05/31 职场文书
2015年暑期见闻
2015/07/14 职场文书
表扬信范文
2019/04/22 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers