国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Bootstrap Modal遮罩彈出層(完整版)

2019-11-19 18:54:25
字體:
來源:轉載
供稿:網友

之前發表過一篇文章叫Bootstrap Modal彈窗代碼,其實那個只是一個彈出層代碼而已,并不是仿造Bootstrap的,Bootstrap modal是給外層添加固定fixed,然后內容使用自適應靠上居中方式。今天分享的這篇文章正是這種方式。

html結構

考慮到內容區域需要居中對齊,所以至少要有一個div來定位和顯示背景,再用一個div居中內容,內容區域想分成header、body和footer。

<div class="rs-dialog" id="myModal1"><div class="rs-dialog-box"><a class="close" href="#">×</a><div class="rs-dialog-header"><h3>標題</h3></div><div class="rs-dialog-body"><p>內容</p></div><div class="rs-dialog-footer"><input type="button" class="close" value="Close" style="float:right"></div></div></div>

添加樣式

透明背景用background和opacity來實現,也可以選擇rgba,只是IE8及以下瀏覽器不支持。為了讓一個position為fixed的div鋪滿整個窗口,可以將其top、right、left、bottom屬性全部設為0。

當內容區域過長時,模擬瀏覽器縱向滾動條,方法是將body(或HTML)的overflow屬性設為hidden,禁止瀏覽器真正的滾動條出現,然后給彈窗最外層的div設置overflow-y:auto,用這個div的滾動條模擬瀏覽器滾動條。

彈窗打開關閉時滾動效果用css3 transition來實現。

.dialog-open{overflow-y:hidden !important;}.rs-overlay{background:#000;opacity:.5;filter: alpha(opacity=50);position: fixed;z-index: 1000;top:0;bottom:0;left:0;right:0;display: none;}.rs-dialog{display: none;opacity: 0;overflow: hidden;position: fixed;top:0;bottom:0;left:0;right:0;z-index: 1040;-webkit-overflow-scrolling: touch;outline: 0;/*background: rgba(0,0,0,.5);*/-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear;}.dialog-open .rs-dialog{overflow-x:hidden;overflow-y:auto;}.rs-dialog.in{opacity: 1;}.rs-dialog .rs-dialog-box {-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out;}.rs-dialog.in .rs-dialog-box {-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0);}.rs-dialog .rs-dialog-box{position: relative;margin:30px auto;width: 600px;background-color: #ffffff;border-radius:10px;border: 1px solid #999999;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);}.logged-in .rs-dialog .rs-dialog-box{margin-top:60px;}.rs-dialog-box a.close{position: absolute;top: -12px;right: -12px;width: 25px;height: 25px;padding: 0;line-height: 25px;font-size:20px;font-family:Arial,sans-serif;font-weight:bold;text-decoration:none;text-align:center;text-shadow: 0 1px 0 #ffffff;color: #fff;background-color:#8b8b8b;border:2px solid #fff;border-radius: 25px;box-shadow:0 0 3px 1px #999;outline: none;}.rs-dialog-box a.close:hover{background-color:#444;}.rs-dialog-header{padding: 20px;border-bottom: 1px solid #e5e5e5;}.rs-dialog-header h3{font-size: 18px;}.rs-dialog-body{padding: 20px;line-height: 1.4}.rs-dialog-body p{margin-bottom:10px;}.rs-dialog-footer{padding: 20px;border-top:1px solid #e5e5e5;overflow: hidden;}@media (max-width: 767px) {.rs-dialog .rs-dialog-box {width: auto;margin: 30px 20px;}}

添加控制腳本

大部分用css實現,所以腳本通過簡單的addClass和removeClass就可以控制開關。

還可以增加點擊彈窗外部關閉窗口的功能。

jQuery(document).ready(function($){$('body').append('<div class="rs-overlay" />');$("a[rel='rs-dialog']").each(function(){var trigger = $(this);var rs_dialog = $('#' + trigger.data('target'));var rs_box = rs_dialog.find('.rs-dialog-box');var rs_close = rs_dialog.find('.close');var rs_overlay = $('.rs-overlay');if( !rs_dialog.length ) return true;// Open dialogtrigger.click(function(){//Get the scrollbar width and avoid content being pushedvar w1 = $(window).width();$('html').addClass('dialog-open');var w2 = $(window).width();c = w2-w1 + parseFloat($('body').css('padding-right'));if( c > 0 ) $('body').css('padding-right', c + 'px' );rs_overlay.fadeIn('fast');rs_dialog.show( 'fast', function(){rs_dialog.addClass('in');});return false;});// Close dialog when clicking on the close buttonrs_close.click(function(e){rs_dialog.removeClass('in').delay(150).queue(function(){rs_dialog.hide().dequeue();rs_overlay.fadeOut('slow');$('html').removeClass('dialog-open');$('body').css('padding-right', '');});return false;});// Close dialog when clicking outside the dialogrs_dialog.click(function(e){rs_close.trigger('click');});rs_box.click(function(e){e.stopPropagation();});});});

防止網頁內容偏移

打開彈窗時給body增加overflow:hidden屬性,導致滾動條消失,這時會使網頁的內容往右移動一下,待彈窗打開滾動條再出現時,又會復原,視覺效果不友好。如果在有滾動條的情況下知道其寬度,給body增加padding-right屬性就可以抵消這個便宜效果。

觸發彈窗

最后,根據上面的腳本,觸發彈窗的鏈接如下

<a href="#" rel="rs-dialog" data-target="myModal">Launch Demo Modal</a>

rel="rs-dialog"表示這是彈窗觸發鏈接

data-target="myModal"表示要打開HTML ID為myModal的彈窗。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵宝市| 普宁市| 湘潭市| 潢川县| 塘沽区| 双城市| 手游| 竹山县| 铁岭市| 沅江市| 房山区| 武山县| 余江县| 华安县| 涪陵区| 岳阳县| 突泉县| 靖远县| 莱芜市| 扎兰屯市| 灵石县| 昌乐县| 永善县| 延吉市| 灵宝市| 高青县| 库车县| 彰武县| 南通市| 华池县| 新晃| 巴里| 岳池县| 凯里市| 射阳县| 罗定市| 那曲县| 固原市| 沧州市| 湟中县| 金山区|