JS+CSS3制作炫酷的彈窗效果
昨天在家看電視時(shí),退出的時(shí)候發(fā)現(xiàn)了一個(gè)彈窗效果,整個(gè)背景模糊,覺得這樣的效果好炫,要比純色加透明度高大上好多,連續(xù)試了幾個(gè)界面,最終確定效果由css實(shí)現(xiàn)的,于是今天一大早來到公司便趕緊搜索了一下,雖然兼容性奇差,但是一個(gè)css屬性就可以搞定。瞬間感覺自己知道的真是太少了~~
首先回憶一下彈窗的實(shí)現(xiàn),一般我們分為兩層,彈出窗口層(popus)和遮罩層(mask),通常情況下我習(xí)慣就這兩元素全部設(shè)成fixed定位,具體和absolute區(qū)別一試便知。對(duì)于mask層自不用多少,我們?nèi)缦陆o他設(shè)置屬性,讓他鋪滿整個(gè)屏幕。
.mask{position:fixed;top:0px;bottom:0px;left:0px;right:0px;background-color:#000;opacity:0.6;filter:alpha(opacity=60)}
popus層則要稍微麻煩點(diǎn)兒,這里我們有兩種實(shí)現(xiàn)方法
1.已知大小的彈窗,如下,主要通過top,left與負(fù)的margin來實(shí)現(xiàn)。
.popus{width:300px;height:200px;position:fixed;left:50%;top:50%;margin-left:-150px;margin-top:-100px;background-color:#000}
2.未知彈窗大小,則通過js獲取彈窗層的width與height,然后在進(jìn)行如上設(shè)置,在此不多述。
3.在支持css3的情況下,我們不需要知道彈窗的寬高,便可進(jìn)行如下設(shè)置
.popus{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%)}
主要通過translate屬性來設(shè)置,偏移的值百分比是相對(duì)于本身的寬高,因此從原理上來說跟第一種寫法有異曲同工之妙,不過使用卻更方便。
言歸正傳,下面我們回歸到正題,即讓元素實(shí)現(xiàn)ps中高斯模糊的效果。
這里引出一個(gè)css屬性:filter,注意這里的filter并不是ie中的filter,filter有很多值,感興趣的可以點(diǎn)擊這里,作者講的非常詳細(xì)。我們今天只講其中的一個(gè)blur,首先看下面的預(yù)覽圖
ps:目前來說該屬性只支持webkit瀏覽器,所以我們直接使用了css3屬性,效果也需要在webkit瀏覽器中查看
是不是很神奇,其中起作用的代碼就這一行 -webkit-filter:blur(8px) ,后面的像素值即代表模糊程度,當(dāng)然在日常項(xiàng)目中,我們還可以加一些動(dòng)畫,使頁面更加的生動(dòng),本案例完整代碼如下:
<div class='bg'> <img src='bg.jpg' /> </div> <div class='popus'> 效果是不是要好過純色加透明呢 <div> <div class='left btn '>確實(shí)不錯(cuò)</div> <div class='right btn'>也就那樣</div> </div> </div>
css:
*{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:
$('.bg').on('click',function(){ console.log(98) $(this).addClass('blur'); $('.popus').show(); }) $('.btn').on('click',function(){ $('.bg').removeClass('blur'); $('.popus').hide(); })
這樣是不是就完了?很明顯不是,看控制臺(tái)
當(dāng)我們彈出窗口外,肯定要禁止掉我們其他層的點(diǎn)擊事件,但是我們發(fā)現(xiàn)目前我們雖然將其他層模糊化了,但是并沒有禁止掉相應(yīng)的事件,當(dāng)然解決辦法也很簡單,我們可以加一層沒有背景顏色的遮罩層,覆蓋在頁面上,這樣我們每次點(diǎn)擊作用在遮罩層上,自然不會(huì)觸發(fā)底層的事件了。
點(diǎn)擊這里查看效果 http://runjs.cn/detail/nrlmmnbg
以上所述是小編給大家介紹的JS+CSS3制作炫酷的彈窗效果,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Bootstrap組合上、下拉框簡單實(shí)現(xiàn)代碼
這篇文章主要介紹了Bootstrap組合上、下拉框的簡單實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03javascript+html5實(shí)現(xiàn)仿flash滾動(dòng)播放圖片的方法
這篇文章主要介紹了javascript+html5實(shí)現(xiàn)仿flash滾動(dòng)播放圖片的方法,可實(shí)現(xiàn)類似Flash滾動(dòng)播放的效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04js將類數(shù)組對(duì)象轉(zhuǎn)換成數(shù)組對(duì)象
javascript與dom有許多瑕疵,如著名的類數(shù)組對(duì)象Arguments,其他諸如HTMLCollection,NodeList如果它們都是數(shù)組的子類,那多省時(shí)啊。2010-05-05javascript 中的try catch應(yīng)用總結(jié)
這篇文章主要介紹了javascript 中的try catch應(yīng)用總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04如何利用JavaScript實(shí)現(xiàn)排序算法淺析
排序算法是筆試中經(jīng)常出現(xiàn)的,提起排序算法就一定要提下算法復(fù)雜度和大O表示法,算法復(fù)雜度是指算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)所需要的資源,資源包括時(shí)間資源和內(nèi)存資源,這篇文章主要給大家介紹了關(guān)于如何利用JavaScript實(shí)現(xiàn)排序算法的相關(guān)資料,需要的朋友可以參考下2021-11-11用javascript連接access數(shù)據(jù)庫的方法
用javascript連接access數(shù)據(jù)庫的方法...2006-11-11小程序云開發(fā)實(shí)現(xiàn)數(shù)據(jù)庫異步操作同步化
這篇文章主要為大家詳細(xì)介紹了小程序云開發(fā)實(shí)現(xiàn)數(shù)據(jù)庫異步操作同步化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05