jQuery+CSS3+Html5實現(xiàn)彈出層效果實例代碼(附源碼下載)
彈出層用來向用戶展示詳細的信息,交互性非常強。彈出層有對話框、模態(tài)窗口等形式,這里我都把他們叫做彈出層,我的同事們也是這么叫的。一般我們喜歡使用比較成熟的彈出層插件如fancybox等,但在本文,我將先拋棄插件,給大家介紹如何使用jQuery+CSS3+Html5實現(xiàn)彈出層。

我們完全使用HTML5+CSS3+jQuery來實現(xiàn)一個基本的彈出層效果,因此我們可以在示例中任意修改彈出層外觀樣式、甚至js方法調用。我們最終做出來的彈出層效果應該是響應式的,也就是說可以在桌面PC端和移動端都可以很好展示的彈出層,并且是兼容現(xiàn)代瀏覽器的。在demo中,我使用了Bootstrap樣式,當然你也可以自己寫個樣式來完成頁面布局。
一個基本的彈出層應該滿足以下需求:
1、點擊按鈕/鏈接觸發(fā)彈出層,彈出層應該有半透明的遮罩層;
2、點擊彈出層的關閉按鈕、取消按鈕或者遮罩層會關閉隱藏彈出層;
3、使用Esc鍵也可以關閉彈出層;
4、它是響應式的,并且兼容現(xiàn)代主流瀏覽器。
HTML
首先我們在頁面放置一個用來觸發(fā)彈出層的鏈接,也可以是個按鈕button,注意的是我們給它設置一個data-show-layer屬性,這個屬性值對應的就是彈出層的id,也就是說通過data-show-layer來關聯(lián)彈出層。
<a class="btn btn-info btn-lg show-layer" data-show-layer="hw-layer" role="button">點擊彈出層</a>
很顯然,上面的鏈接關聯(lián)的彈出層的id是hw-layer。那好,選擇我們來準備彈出層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)的一個彈出層效果,它是響應式的,它可以在所有現(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控制它是一個半透明的層,用來隔開彈出層和頁面主體內容。r然后在.hw-layer-wrap主體層內,我們可以設置彈出層的內容,當然內容由你來定,我們本文結合實例彈出層的內容是一個確認對話框,類似window的confirm()。內容使用了bootstrap的col-*柵格布局,還用了glyphicon字體圖標。其實最關鍵的就是需要遮罩層和主體層,內容可以根據(jù)項目需求自定義,因為它可能是個表單、也可能是個純文字說明的內容。
CSS
CSS也是關鍵的部分,我們先設置遮罩層,它默認情況下應該是不可見的,位置上fixed固定的,并且是覆蓋整個頁面的,它還是半透明的,我們這里設置了背景黑色、透明度0.3,如background-color: rgba(0,0,0,0.3)。然后主體層.hw-layer-wrap,我們設置它的寬度,計算它的位置。寬度我們可以預設一個值,高度由于內容多少不確定,這里我們不用設置一個具體的值,在后面的js部分會對高度處理,然后設置居中以及邊框陰影等效果。有關水平和垂直居中的設置可以參閱Helloweba文章:如何讓DIV水平和垂直居中。彈出層里面的內容樣式可以自由設置,最后就是使用media query來設置小屏幕下的彈出層居中的問題。
.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ā)彈出層和關閉彈出層效果,應此需要預先加載jQuery庫。showLayer(id)是一個自定義的函數(shù),用來展示彈出層。當點擊按鈕或鏈接調用這個showLayer(id)函數(shù),它會漸現(xiàn)的效果展示,并且計算彈出層的高度位移距離,使得彈出主體層水平和垂直方向的居中。而函數(shù)hideLayer()就是隱藏彈出層,fadeOut()或者hide()就能實現(xiàn)。最后再加上觸發(fā)遮罩層的時候關閉彈出層以及使用Esc按鈕的時候關閉彈出層的代碼。
$(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);
});
//點擊或者觸控彈出層外的半透明遮罩層,關閉彈出層
$('.hw-overlay').on('click', function(event) {
if (event.target == this){
hideLayer();
}
});
//按ESC鍵關閉彈出層
$(document).keyup(function(event) {
if (event.keyCode == 27) {
hideLayer();
}
});
});
其實到這里,一個基本的彈出層效果已經(jīng)做好了。我們這里只是做一個基本的彈出層,你也可以進行繼續(xù)擴展代碼。我們看過很多彈出層插件,很多都是動態(tài)直接操作DOM的,也就是通過js代碼先createElement,然后在將內容append到body里的,這種方式如果是頻繁操作DOM的話會消耗一定的性能,所以從性能角度考慮的話,我推薦使用本文提供的彈出層方式。
好了,接下來我們將彈出層的代碼封裝成一個簡單的jQuery插件,以插件的形式來調用,滿足各種不同彈出層效果的需求,敬請關注。
- Jquery+CSS3實現(xiàn)一款簡潔大氣帶滑動效果的彈出層
- jQuery Dialog 彈出層對話框插件
- jQuery彈出層始終垂直居中相對于屏幕或當前窗口
- 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)典彈出層效果示例
相關文章
JQuery插件fancybox無法在彈出層使用左右鍵的解決辦法
本篇文章主要是對JQuery插件fancybox無法在彈出層使用左右鍵的解決辦法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12
jQuery中彈出iframe內嵌頁面元素到父頁面并全屏化的實例代碼
這篇文章主要介紹了jQuery中彈出iframe內嵌頁面元素到父頁面并全屏化的實例代碼,需要的朋友可以參考下2016-12-12
jQuery簡單實現(xiàn)點擊文本框復制內容到剪貼板上的方法
這篇文章主要介紹了jQuery簡單實現(xiàn)點擊文本框復制內容到剪貼板上的方法,涉及jQuery針對瀏覽器的判定與剪貼板的讀寫操作技巧,需要的朋友可以參考下2016-08-08
jQuery EasyUI基礎教程之EasyUI常用組件(推薦)
這篇文章主要介紹了jQuery EasyUI基礎教程之EasyUI常用組件(推薦),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
jQuery EasyUI中DataGird動態(tài)生成列的方法
EasyUI中使用DataGird顯示數(shù)據(jù)列表中,有時需要根據(jù)需要顯示不同的列,例如,在權限管理中,不同的用戶登錄后只能查看自己權限范圍內的列表字段,這就需要DataGird動態(tài)組合列,下面介紹EasyUI中DataGird動態(tài)生成列的方法2016-04-04
jQuery插件MovingBoxes實現(xiàn)左右滑動中間放大圖片效果
本篇文章主要介紹jQuery中MovingBoxes左右滑動放大圖片插件示例,實現(xiàn)左右滑動和放大效果,有興趣的可以了解一下。2017-02-02

