jQuery+CSS3+Html5實現(xiàn)彈出層效果實例代碼(附源碼下載)
彈出層用來向用戶展示詳細(xì)的信息,交互性非常強(qiáng)。彈出層有對話框、模態(tài)窗口等形式,這里我都把他們叫做彈出層,我的同事們也是這么叫的。一般我們喜歡使用比較成熟的彈出層插件如fancybox等,但在本文,我將先拋棄插件,給大家介紹如何使用jQuery+CSS3+Html5實現(xiàn)彈出層。
我們完全使用HTML5+CSS3+jQuery來實現(xiàn)一個基本的彈出層效果,因此我們可以在示例中任意修改彈出層外觀樣式、甚至js方法調(diào)用。我們最終做出來的彈出層效果應(yīng)該是響應(yīng)式的,也就是說可以在桌面PC端和移動端都可以很好展示的彈出層,并且是兼容現(xiàn)代瀏覽器的。在demo中,我使用了Bootstrap樣式,當(dāng)然你也可以自己寫個樣式來完成頁面布局。
一個基本的彈出層應(yīng)該滿足以下需求:
1、點擊按鈕/鏈接觸發(fā)彈出層,彈出層應(yīng)該有半透明的遮罩層;
2、點擊彈出層的關(guān)閉按鈕、取消按鈕或者遮罩層會關(guān)閉隱藏彈出層;
3、使用Esc鍵也可以關(guān)閉彈出層;
4、它是響應(yīng)式的,并且兼容現(xiàn)代主流瀏覽器。
HTML
首先我們在頁面放置一個用來觸發(fā)彈出層的鏈接,也可以是個按鈕button,注意的是我們給它設(shè)置一個data-show-layer屬性,這個屬性值對應(yīng)的就是彈出層的id,也就是說通過data-show-layer來關(guān)聯(lián)彈出層。
<a class="btn btn-info btn-lg show-layer" data-show-layer="hw-layer" role="button">點擊彈出層</a>
很顯然,上面的鏈接關(guān)聯(lián)的彈出層的id是hw-layer。那好,選擇我們來準(zhǔn)備彈出層hw-layer的html代碼。
<div class="hw-overlay" id="hw-layer"> <div class="hw-layer-wrap"> <span class="glyphicon glyphicon-remove hwLayer-close"></span> <div class="row"> <div class="col-md-3 col-sm-12 hw-icon"> <i class="glyphicon glyphicon-info-sign"></i> </div> <div class="col-md-9 col-sm-12"> <h4>你確定嗎?</h4> <p>這是HTML+CSS+Javascript實現(xiàn)的一個彈出層效果,它是響應(yīng)式的,它可以在所有現(xiàn)代瀏覽器上工作(包括PC和移動端)。</p> <button class="btn btn-success hwLayer-ok">確 定</button> <button class="btn btn-warning hwLayer-cancel">取 消</button> </div> </div> </div> </div>
我們彈出層的最外層,也就是遮罩層.hw-overlay,我們會使用CSS控制它是一個半透明的層,用來隔開彈出層和頁面主體內(nèi)容。r然后在.hw-layer-wrap主體層內(nèi),我們可以設(shè)置彈出層的內(nèi)容,當(dāng)然內(nèi)容由你來定,我們本文結(jié)合實例彈出層的內(nèi)容是一個確認(rèn)對話框,類似window的confirm()。內(nèi)容使用了bootstrap的col-*柵格布局,還用了glyphicon字體圖標(biāo)。其實最關(guān)鍵的就是需要遮罩層和主體層,內(nèi)容可以根據(jù)項目需求自定義,因為它可能是個表單、也可能是個純文字說明的內(nèi)容。
CSS
CSS也是關(guān)鍵的部分,我們先設(shè)置遮罩層,它默認(rèn)情況下應(yīng)該是不可見的,位置上fixed固定的,并且是覆蓋整個頁面的,它還是半透明的,我們這里設(shè)置了背景黑色、透明度0.3,如background-color: rgba(0,0,0,0.3)。然后主體層.hw-layer-wrap,我們設(shè)置它的寬度,計算它的位置。寬度我們可以預(yù)設(shè)一個值,高度由于內(nèi)容多少不確定,這里我們不用設(shè)置一個具體的值,在后面的js部分會對高度處理,然后設(shè)置居中以及邊框陰影等效果。有關(guān)水平和垂直居中的設(shè)置可以參閱Helloweba文章:如何讓DIV水平和垂直居中。彈出層里面的內(nèi)容樣式可以自由設(shè)置,最后就是使用media query來設(shè)置小屏幕下的彈出層居中的問題。
.hw-overlay{display:none; position: fixed; top:0;left:0;width:100%;height:100%; background-color: rgba(0,0,0,0.3);z-index:10;} .hw-layer-wrap{box-sizing:border-box; width:570px; position:absolute;left:50%;top:50%; margin-left:-285px; border-radius:3px; background-color:#fff; box-shadow:1px 2px 4px 0 rgba(0,0,0,0.12); padding:45px 50px;} .hwLayer-close{position:absolute; right:20px; top:20px; width:20px; height:20px; cursor:pointer; font-size:20px; color:#ccc;} .hw-layer-wrap .hw-icon{color:#b4d8f3;font-size:86px;text-align:center;} .hw-layer-wrap h4{margin:5px 0 30px; font-size:24px; color:#383c3e;} .hw-layer-wrap p{margin:30px 0; line-height:22px; color:#595d60; text-align:left;} @media (max-width:768px){ .hw-layer-wrap{width:350px; margin-left:-175px; margin-top:-200px; padding:45px 50px; text-align:center;} } @media (max-width:400px){ .hw-layer-wrap{width:250px; margin-left:-125px;padding:25px 30px;} }
Javascript
我們使用jQuery來處理觸發(fā)彈出層和關(guān)閉彈出層效果,應(yīng)此需要預(yù)先加載jQuery庫。showLayer(id)是一個自定義的函數(shù),用來展示彈出層。當(dāng)點擊按鈕或鏈接調(diào)用這個showLayer(id)函數(shù),它會漸現(xiàn)的效果展示,并且計算彈出層的高度位移距離,使得彈出主體層水平和垂直方向的居中。而函數(shù)hideLayer()就是隱藏彈出層,fadeOut()或者h(yuǎn)ide()就能實現(xiàn)。最后再加上觸發(fā)遮罩層的時候關(guān)閉彈出層以及使用Esc按鈕的時候關(guān)閉彈出層的代碼。
$(function(){ //展示層 function showLayer(id){ var layer = $('#'+id), layerwrap = layer.find('.hw-layer-wrap'); layer.fadeIn(); //屏幕居中 layerwrap.css({ 'margin-top': -layerwrap.outerHeight()/2 }); } //隱藏層 function hideLayer(){ $('.hw-overlay').fadeOut(); } $('.hwLayer-ok,.hwLayer-cancel,.hwLayer-close').on('click', function() { hideLayer(); }); //觸發(fā)彈出層 $('.show-layer').on('click', function() { var layerid = $(this).data('show-layer'); showLayer(layerid); }); //點擊或者觸控彈出層外的半透明遮罩層,關(guān)閉彈出層 $('.hw-overlay').on('click', function(event) { if (event.target == this){ hideLayer(); } }); //按ESC鍵關(guān)閉彈出層 $(document).keyup(function(event) { if (event.keyCode == 27) { hideLayer(); } }); });
其實到這里,一個基本的彈出層效果已經(jīng)做好了。我們這里只是做一個基本的彈出層,你也可以進(jìn)行繼續(xù)擴(kuò)展代碼。我們看過很多彈出層插件,很多都是動態(tài)直接操作DOM的,也就是通過js代碼先createElement,然后在將內(nèi)容append到body里的,這種方式如果是頻繁操作DOM的話會消耗一定的性能,所以從性能角度考慮的話,我推薦使用本文提供的彈出層方式。
好了,接下來我們將彈出層的代碼封裝成一個簡單的jQuery插件,以插件的形式來調(diào)用,滿足各種不同彈出層效果的需求,敬請關(guān)注。
- Jquery+CSS3實現(xiàn)一款簡潔大氣帶滑動效果的彈出層
- jQuery Dialog 彈出層對話框插件
- jQuery彈出層始終垂直居中相對于屏幕或當(dāng)前窗口
- jquery實現(xiàn)居中彈出層代碼
- JQuery彈出層示例可自定義
- jQuery+html5實現(xiàn)div彈出層并遮罩背景
- jQuery插件zoom實現(xiàn)圖片全屏放大彈出層特效
- JQUERY THICKBOX彈出層插件
- jQuery Mobile彈出窗、彈出層知識匯總
- jQuery點縮略圖彈出層顯示大圖片
- jQuery Layer彈出層傳值到父頁面的實現(xiàn)代碼
- jquery+css3實現(xiàn)的經(jīng)典彈出層效果示例
相關(guān)文章
jquery實現(xiàn)手機(jī)端單店鋪購物車結(jié)算刪除功能
本文主要介紹了js實現(xiàn)手機(jī)端單店鋪購物車結(jié)算刪除功能的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02JQuery插件fancybox無法在彈出層使用左右鍵的解決辦法
本篇文章主要是對JQuery插件fancybox無法在彈出層使用左右鍵的解決辦法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12jQuery中彈出iframe內(nèi)嵌頁面元素到父頁面并全屏化的實例代碼
這篇文章主要介紹了jQuery中彈出iframe內(nèi)嵌頁面元素到父頁面并全屏化的實例代碼,需要的朋友可以參考下2016-12-12jQuery簡單實現(xiàn)點擊文本框復(fù)制內(nèi)容到剪貼板上的方法
這篇文章主要介紹了jQuery簡單實現(xiàn)點擊文本框復(fù)制內(nèi)容到剪貼板上的方法,涉及jQuery針對瀏覽器的判定與剪貼板的讀寫操作技巧,需要的朋友可以參考下2016-08-08jQuery EasyUI基礎(chǔ)教程之EasyUI常用組件(推薦)
這篇文章主要介紹了jQuery EasyUI基礎(chǔ)教程之EasyUI常用組件(推薦),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07jQuery EasyUI中DataGird動態(tài)生成列的方法
EasyUI中使用DataGird顯示數(shù)據(jù)列表中,有時需要根據(jù)需要顯示不同的列,例如,在權(quán)限管理中,不同的用戶登錄后只能查看自己權(quán)限范圍內(nèi)的列表字段,這就需要DataGird動態(tài)組合列,下面介紹EasyUI中DataGird動態(tài)生成列的方法2016-04-04jQuery插件MovingBoxes實現(xiàn)左右滑動中間放大圖片效果
本篇文章主要介紹jQuery中MovingBoxes左右滑動放大圖片插件示例,實現(xiàn)左右滑動和放大效果,有興趣的可以了解一下。2017-02-02