zoukankan      html  css  js  c++  java
  • 一个简单的跨浏览器的弹出窗口的实现

    先看效果:

    首先看实现思路:

    第一步: 弹出一个遮罩层mask

    遮罩层需要覆盖整个网页内容区域,所以很明显,它的宽度和高度就是整个内容区域的高度和高度。由于各浏览器的嗜好不同,有的浏览器把document.body.scrollHeight认为是整个内容区域的高度,而有的把document.documentElement.scrollHeight认为是整个内容区域的高度,不要纠结浏览器大战了,直接用Math.max搞定吧,反正记住大的那个就是了。

    有了这个高度宽度,弹出这个遮罩就很easy了,只需要创建一个div,然后设置它的背景色,透明度,高度宽度,position为absolute,left、top为0就行了:

    var canvasSize = {
                    height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)
                    , Math.max(document.body.scrollWidth, document.documentElement.scrollWidth)
                }
    mask = document.createElement('div');
    mask.style.cssText = 'height: '+ canvasSize.height +'px; '+ canvasSize.width +'px; background-color: black; opacity: 0.5; position: absolute; top: 0px; left: 0px;';
    document.body.appendChild(mask);

    第二步:弹出一个垂直居中,水平也居中的层,并在这个层里插入内容

    要实现这一步,我们需要得到可视区域的高度宽度,然后得到我们需要弹出的层的高度宽度,考虑再周到一点,得到当前滚动条的的位置,这样我们就能计算出来我们的弹出层的top和left值了。

    可视区域高度宽度各个浏览器没啥争议,在标准里都是document.documentElement.clientHeight。这里可以documentElement理解成html标签,然后它的高度宽度就是可视区域高度宽度,body只是overflow了而已。

    要得到弹出层的宽度高度,我首先把他的透明度设置为空(元素必须在display不为none且visible不为hidden时才能计算其高度宽度),然后再通过offsetHeight属性获得它的border盒子的高度,获得后在设置它的opacity为空即可。

    至于滚动条的位置,各个浏览器也有争议,同上直接max即可:Math.max(document.body.scrollLeft,document.documentElement.scrollLeft)。

    至此,我们可以计算弹出层的top和left了。top=(可视区域高度-弹出层高度)/2 + scrollTop,left同理。

    windowSize = {
        height: document.documentElement.clientHeight
        , document.documentElement.clientWidth
    };
    var container=document.createElement('div')
    container.style.cssText = 'opacity:0;position:absolute;background-color:white';
    document.body.appendChild(container);
    container.style.left = ((windowSize.width - container.offsetWidth) / 2 + Math.max(document.body.scrollLeft,document.documentElement.scrollLeft)) + 'px';
    container.style.top = ((windowSize.height - container.offsetHeight) / 2 + Math.max(document.body.scrollTop,document.documentElement.scrollTop)) + 'px';
    container.style.opacity = '';

    好了,剩下的就是在弹出窗口的function里把我们刚刚的实现整合起来就行了

    完整代码如下:

  • 相关阅读:
    hbase权威指南PDF下载
    流畅的pythonPDF下载
    现代操作系统PDF下载
    Kafka权威指南PDF下载
    java核心技术卷1PDF下载
    计算机网络自顶向下方法PDF下载
    git gitlab 部署
    MySQL 索引、事务与存储引擎(详细解读)
    QT: Layout布局间消除间隙(修改layout内置参数)
    数据结构---归并排序
  • 原文地址:https://www.cnblogs.com/libmw/p/2606970.html
Copyright © 2011-2022 走看看