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 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
jQuery 移动端artEditor富文本编辑器
Jan 11 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
EasyUI加载完Html内容样式渲染完成后显示
Jul 25 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
vue实现word,pdf文件的导出功能
Jul 31 Javascript
vue通过style或者class改变样式的实例代码
Oct 30 Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
Sep 22 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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python使用KNN算法手写体识别
2018/02/01 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
医生实习工作总结的自我评价
2013/09/27 职场文书
个人求职简历的自我评价范文
2013/10/09 职场文书
文言文形式的学生求职信
2013/12/03 职场文书
大型演出策划方案
2014/05/28 职场文书
运动会的口号
2014/06/09 职场文书
环境科学专业求职信
2014/08/04 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
贷款收入证明范本
2015/06/12 职场文书
法制教育主题班会
2015/08/13 职场文书
民事调解协议书
2016/03/21 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
JavaScript设计模式之原型模式详情
2022/06/21 Javascript