炫酷彈窗效果製做

 

       昨天在家看電視時,退出的時候發現了一個彈窗效果,整個背景模糊,以爲這樣的效果好炫,要比純色加透明度高大上好多,連續試了幾個界面,最終肯定效果由css實現的,因而今天一大早來到公司便趕忙搜索了一下,雖然兼容性奇差,可是一個css屬性就能夠搞定。瞬間感受本身知道的真是太少了~~css

       首先回憶一下彈窗的實現,通常咱們分爲兩層,彈出窗口層(popus)和遮罩層(mask),一般狀況下我習慣就這兩元素所有設成fixed定位,具體和absolute區別一試便知。對於mask層自不用多少,咱們以下給他設置屬性,讓他鋪滿整個屏幕。css3

.mask{position:fixed;top:0px;bottom:0px;left:0px;right:0px;background-color:#000;opacity:0.6;filter:alpha(opacity=60)}


popus層則要稍微麻煩點兒,這裏咱們有兩種實現方法
       1.已知大小的彈窗,以下,主要經過top,left與負的margin來實現。web

.popus{width:300px;height:200px;position:fixed;left:50%;top:50%;margin-left:-150px;margin-top:-100px;background-color:#000}

       2.未知彈窗大小,則經過js獲取彈窗層的width與height,而後在進行如上設置,在此很少述。
       3.在支持css3的狀況下,咱們不須要知道彈窗的寬高,即可進行以下設置瀏覽器

.popus{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%)}


     主要經過translate屬性來設置,偏移的值百分比是相對於自己的寬高,所以從原理上來講跟第一種寫法有殊途同歸之妙,不過使用卻更方便。ide

     言歸正傳,下面咱們迴歸到正題,即讓元素實現ps中高斯模糊的效果。
     這裏引出一個css屬性:filter,注意這裏的filter並非ie中的filter,filter有不少值,感興趣的能夠點擊這裏,做者講的很是詳細。咱們今天只講其中的一個blur,首先看下面的預覽圖動畫

    ps:目前來講該屬性只支持webkit瀏覽器,因此咱們直接使用了css3屬性,效果也須要在webkit瀏覽器中查看this

image      

      是否是很神奇,其中起做用的代碼就這一行 -webkit-filter:blur(8px) ,後面的像素值即表明模糊程度,固然在平常項目中,咱們還能夠加一些動畫,使頁面更加的生動,本案例完整代碼以下:spa

<div class='bg'>
   <img src='bg.jpg' />
</div>
<div class='popus'>
   效果是否是要好過純色加透明呢
   <div>
     <div class='left btn '>確實不錯</div>
     <div class='right btn'>也就那樣</div>
   </div>
</div>

css:code

*{padding:0px;margin:0px}
img{width:100%;margin:0px auto;display:block}
.bg.blur{-webkit-filter:blur(8px)}
.popus{width:400px;color:#000;;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);font-family:"微軟雅黑";padding:20px 0px;font-weight:bold;background-color:rgba(255,255,255,0.6);border-radius:18px;text-align:center;padding:30px 0px;box-shadow:0px 0px 10px rgba(0,0,0,0.4);display:none}
.popus div{width:220px;margin:10px auto}
.popus div.btn{width:80px;padding:5px 10px;color:#000}
.left{float:left;border:1px solid #000}
.popus div.btn.right{float:right;color:#666}

js:orm

$('.bg').on('click',function(){
    console.log(98)
    $(this).addClass('blur');
    $('.popus').show();
})
$('.btn').on('click',function(){
    $('.bg').removeClass('blur');
    $('.popus').hide();
})

      這樣是否是就完了?很明顯不是,看控制檯

image

      當咱們彈出窗口外,確定要禁止掉咱們其餘層的點擊事件,可是咱們發現目前咱們雖然將其餘層模糊化了,可是並無禁止掉相應的事件,固然解決辦法也很簡單,咱們能夠加一層沒有背景顏色的遮罩層,覆蓋在頁面上,這樣咱們每次點擊做用在遮罩層上,天然不會觸發底層的事件了。

點擊這裏查看效果   http://runjs.cn/detail/nrlmmnbg

相關文章
相關標籤/搜索