在页面加载问题上模糊弹出窗口

时间:2016-08-01 14:58:48

标签: javascript html css popup onload

我正在一个弹出的网站上工作,我唯一缺少的就是这个弹出窗口显示时的模糊效果。每次页面加载时都会显示此弹出窗口,因此我在SO上找到了一个很棒的模糊代码。虽然该代码适用于按钮显示模糊效果的功能。 因为我已经更改了代码,所以现在不是按钮,而是从body标签启动onLoad。 唯一的问题是模糊显示在它不应该的实际弹出窗口之前。我试图更改弹出的CSS代码中的z-index,但它不起作用。

以下是我的代码的JSFiddle(已修改)显然这在Safari上不起作用。

HTML:

<div id="overlay"> 
<div id="popup"> 
<a href="javascript:myBlurFunction(0);">X</a> 
</div>
</div>

<body id="main_container" onload="myBlurFunction(1)">

</body>

使用Javascript:

myBlurFunction = function(state) {
    var containerElement = document.getElementById('main_container');
    var overlayEle = document.getElementById('overlay');

    if (state) {
        overlayEle.style.display = 'block';
        containerElement.setAttribute('class', 'blur');
    } else {
        overlayEle.style.display = 'none';
        containerElement.setAttribute('class', null);
    }
};

CSS:

.blur   {
    filter: blur(5px);
    -webkit-filter: blur(5px);
    -moz-filter: blur(5px);
    -o-filter: blur(5px);
    -ms-filter: blur(5px);
}

#overlay    {
    position: fixed;
    display: none;
    left: 0px;
    top: 0px;
    right: 0px;
    bottom: 0px;
    background: rgba(255,255,255,.8);
    z-index: 999;
}

#popup {
    position: absolute;
    width: 400px;
    height: 200px;
    background: rgb(255,255,255);
    border: 5px solid rgb(90,90,90);
    left: 0px;
    right: 0px;
    top: 0px;
    bottom: 0px;
    margin: auto;
}

以下是SO答案中股票代码的JSFiddle

3 个答案:

答案 0 :(得分:3)

body标记应包含所有页面内容。 您可以执行以下操作:

<body onload="myBlurFunction(1);">
  <div id="overlay"> 
   <div id="popup">
    <a href="javascript:myBlurFunction(0);">X</a> 
   </div>
  </div>

  <div id="main_container"> 
      Whatever
  </div>
</body>

请参阅jsfiddle

答案 1 :(得分:0)

在这种情况下,这是因为您在Body中设置模糊。 我猜想,最好的屁股是创建一个Div来放置Blur,e在弹出窗口后以100%e显示这个div,其Z-index高于模糊。

答案 2 :(得分:0)

对标记应用模糊会对所有内部标记产生影响,因此请尝试这种方式。

不要在身体上设置任何样式:

<body onload="myBlurFunction(true)">

不要在叠加层中包含弹出窗口(我添加了一个按钮 - 你应该使用一个而不是锚点):

<div id="overlay" class="blur"></div>
<div id="popup">
  <button onclick="javascript: myBlurFunction(false);">X</button> 
  <a href="javascript: myBlurFunction(false);">LINK X</a> 
</div>

如您所见,我将blur css类直接添加到叠加层(未注释的代码)。

修改脚本:

myBlurFunction = function(state) {
    var overlayEle = document.getElementById('overlay');
    var popupEle = document.getElementById('popup');

    if (state) {
        overlayEle.style.display = 'block';
        //overlayEle.setAttribute('class', 'blur');
        popupEle.style.display = 'block';
    } else {
        overlayEle.style.display = 'none';
        //overlayEle.setAttribute('class', null);
        popupEle.style.display = 'none';
    }
};

将弹出窗口位置设置为固定位置,因为它不再叠加在您的位置:

#popup {
    position: fixed;
}

小提琴:https://jsfiddle.net/uy4xvz12/19/