弹出框始终保持居中(包括有滚动条和窗体缩放时)

之前写的代码,都是在当前窗口位于居中,可是一旦窗口缩小或者放大都不是位于居中的位置了,但是一直想写的一个类似于alert弹出窗口的效果。

原理很简单:

获取当前屏幕(窗体)的宽度和高度,因为不同浏览器的窗体大小是不一样的。有了这个,可以计算出来横向居中和垂直居中的坐标。但是滑动了滚动条怎么依然横向居中和垂直居中呢?这个时候就要获取当前窗体距离页面顶部的高度和横向滚动条移动的宽度,加到刚刚的y轴坐标即可。

$(document)是获取整个网页的,$(window)是获取当前窗体的,这个要搞清楚。

最后把获取的坐标赋给窗体即可,窗体本身是绝对定位的,所以自然可以到窗体中间。

效果体验:http://runjs.cn/detail/tj4jq1qr

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>弹出确认框始终位于窗口正中央</title>
<style type="text/css">

.mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #000; opacity: 0.5;  filter: alpha(opacity=50); display: none; z-index: 99; }
.alertBox {position: absolute; display: none; width: 250px; height: 100px; border: 1px solid #ccc; background: #ececec; text-align: center; z-index: 101; }
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $(‘.btn‘).click(function() {
        $(‘.mask‘).css({‘display‘: ‘block‘});
        center($(‘.alertBox‘));
        $(‘.alertBox‘).css({‘display‘: ‘block‘});
    });
    // 居中

    function leftTop(obj){
            var screenWidth = $(window).width();
            var screenHeight = $(window).height();
            var scrolltop = $(document).scrollTop();
            var scrollleft = $(document).scrollLeft();
            var objLeft = (screenWidth - obj.width())/2 + scrollleft  ;
            var objTop = (screenHeight - obj.height())/2 + scrolltop;
            obj.css({left: objLeft + ‘px‘, top: objTop + ‘px‘});
    }
    function center(obj) {
        leftTop(obj);

        //浏览器窗口大小改变时
        $(window).resize(function() {
             leftTop(obj);
        });
        //浏览器有滚动条时的操作、
        $(window).scroll(function() {
            leftTop(obj);
        });

    }
    //确定取消的操作
    $(‘.btn1,.btn2‘).click(function(){
        $(‘.mask,.alertBox‘).hide();
    })

});
</script>
</head>
<body>
<input type="button" class="btn" value="btn" style="margin-top:2500px; margin-left:800px;"/>
<div style="height:3000px; width:3000px;">弹出确认框始终位于窗口的正中央</div>
<div class="mask"></div>
<div class="alertBox">
 <p>确定要删除吗?</p>
 <p><input type="button" value="确定" class="btn1"/>
 <input type="button" value="取消"class="btn2"/></p>
</div>
</body>
</html>

其实,事实上,无意之间还想到一个比较好的解决方案,就是这个弹出框用固定定位position=‘fixed’,然后left和top各定位50%。就会实现上面辣么多jquery代码实现的效果。

时间: 2024-10-08 03:16:59

弹出框始终保持居中(包括有滚动条和窗体缩放时)的相关文章

弹出框文档居中

1 div{ 2 background:#f00; 3 width:100px; 4 height:100px; 5 position:fixed; 6 overflow:hidden; 7 top:50%; 8 left:50%; 9 margin:-50px 0 0 -50px;//利用margin负值时特性,就不需要什么js了 10 } margin负值可以做出很多特效,如果哪位大神有更好的例子,求分享学习

menu-普通menu弹出框样式

今天接触到了menu弹出框样式.主要就是在theme下进行调整.现在把接触到的知识点总结一下. 在theme中,跟menu有关的几个属性如下 <item name="panelBackground">@android:drawable/menu_panel_color_funui</item> <item name="panelFullBackground">@android:drawable/menu_background_fi

弹出框背景色透明滚动条滚动仍然居中

弹出框div: <div class="webbox" style=""> <div class="webboxtop"> <span class="tstitle">发货网点(收货网点)</span> <a href="#" class="closebox"></a> </div> <div cl

java生成excel表格和pdf并实现下载弹出框

今天在pdf和excel中都实现了在浏览器弹出下载框 将之前在网上查找的生成excel表格代码稍微修改下: public class CreateSimpleExcelToDisk { /** * @功能:手工构建一个简单格式的Excel */ private static List<News> getNews() throws Exception { List<News> data = new ArrayList<News>(); NewsDao dao = new

嫌弃浏览器自带弹出框,写个简单的jq自定义弹窗插件

最近做项目写个表单验证,提交信息验证有错误的时候,用了最懒的方法,直接把错误提示用alert()弹出框弹出来,于是老大看完后给了这个表情... 确实,自带弹窗样式丑不能自定义这些问题困扰着很多用户,而且在同浏览器有不同的表现, 有这样的:.. 有这样的:.. 还有这样的:.. 还有这样的: 相信做前端的都很熟悉这些面孔~ 不统一风格的弹窗直接拉低了整个网站的逼格.. 好,那就写个简单的JQ插件来装饰一下吧. JQ插件标准的封装代码如下,首先需要闭包: <script type="text/

js 常见弹出框学习

模拟系统的弹出框 系统自带的弹出框 总结 链接  http://blog.csdn.net/anhuidelinger/article/details/17024491 参考这个网站学习模态框的动态弹出   http://tympanus.net/codrops/2013/06/25/nifty-modal-window-effects/,网站提供打包好的资源下载. html中的基本结构: <div class="md-modal md-effect-1" id="mo

[js]uploadify结合jqueryUI弹出框上传,js中的冒出的bug,又被ie坑了

引言 最近在一个项目中,在用户列表中需要对给没有签名样本的个别用户上传签名的样本,就想到博客园中上传图片使用弹出框方式,博客园具体怎么实现的不知道,只是如果自己来弄,想到两个插件的结合使用,在弹出框中使用uploadify插件进行上传,每次都会报错很是无语,最后找到解决方案,这里记录一下,算是对工作中遇到的bug的一个总结. bug 这是vs调试状态下,显示的信息.在浏览器端,点击第一次上传按钮,正常,将弹出框关闭后,第二次打开,就会出现问题: 第一次单击上传: 第二次,关闭弹出框,再次单击上传

BootStrap学习笔记JS插件(一)--模态弹出框

一.弹出框基础 <div class="modal show"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss=&quo

关于Layer弹出框初探

layer至今仍作为layui的代表作,她的受众广泛并非偶然,而是这五年多的坚持,不断完善和维护.不断建设和提升社区服务,使得猿们纷纷自发传播,乃至于成为今天的Layui最强劲的源动力.目前,layer已成为国内最多人使用的web弹层组件,GitHub自然Stars3000+,官网累计下载量达20w+,大概有15万Web平台正在使用layer. <html> <head> <title>弹窗效果</title> </head> <scrip