js實(shí)現(xiàn)類bootstrap模態(tài)框動(dòng)畫

在pc端開發(fā)佑颇,模態(tài)框是一個(gè)很常用的插件,之前一直用的第三方插件,比如bootstrap墩剖,jQuery的模態(tài)框插件猴凹,最近還用了elementUI的。但是會(huì)發(fā)現(xiàn)其實(shí)動(dòng)畫效果都差不多岭皂,那么如何去實(shí)現(xiàn)這樣一個(gè)動(dòng)畫效果呢郊霎?

模態(tài)框的構(gòu)成

?常見(jiàn)的模態(tài)框的結(jié)構(gòu)我們很容易就可以看出,一個(gè)遮罩層爷绘,還有內(nèi)容區(qū)书劝。內(nèi)容區(qū)主要是頭部(包括標(biāo)題,關(guān)閉按鈕)和body部分(body中常常會(huì)有確認(rèn)和取消按鈕)土至。

布局

?1.背景要充滿全屏购对,而且如果頁(yè)面有滾動(dòng),當(dāng)模態(tài)框彈出的時(shí)候是無(wú)法滾動(dòng)的陶因;
?2.內(nèi)容區(qū)要水平居中顯示骡苞,至于垂直方向看設(shè)計(jì)嘍;
?3.模態(tài)框出現(xiàn)是漸漸顯示出來(lái)楷扬,而且從頂部滑下解幽;

實(shí)現(xiàn)

?遮罩使用最外層元素占滿全屏(position:fixed;),并設(shè)置背景色不透明度(rgba(0,0,0,0.5))烘苹。
?水平居中有很多方式躲株,這里使用

margin:30px auto;
重點(diǎn)介紹下關(guān)于模態(tài)框動(dòng)畫的實(shí)現(xiàn)

?關(guān)于漸漸顯示使用opacity就可以,而從頂部滑下使用translate也很容易實(shí)現(xiàn)螟加。這么看來(lái)徘溢,很容易做嘛,只需要改變classname就可以了捆探。
html

 <input type="button" value="click" id="btn">
<div class="modal" id="modal">
    <div class="dialog">
        <header class="dialog-header">
            <h3>this is dialog title</h3>
            <span id="close">&times;</span>
        </header>
        <div class="dialog-content">
            this is dialog content
          </div>
      </div>
</div>

style

.modal{
        position:fixed;
        left:0;
        right:0;
        top:0;
        bottom:0;
        background-color:rgba(0,0,0,0.5);
        display:none;
        z-index:1050;
        opacity:0;
        transition: all .5s ease-out 0s;
    }
    .dialog{
        width:500px;
        height:300px;
        position:relative;
        box-shadow:0 5px 15px rgba(0,0,0,.5);
        border-radius:10px;
        background-color:#fff;
        margin:30px auto;
        transform: translate(0,-40%);
        -webkit-transform: translate(0,-40%);
        transition: all .5s ease-out 0s;
    }
    .dialog-header{
        box-sizing:border-box;
        border-bottom:1px solid #ccc;
    }
    .dialog-header h3,.dialog-header span{
        display:inline-block;
    }
    .dialog-header span{
        float:right;
        margin-right:10px;
        overflow: hidden;
        line-height:58px;
        cursor:default;
        font-size:18px;
    }
    .in{
        opacity: 1;
    }
    .in .dialog{
        transform: translate(0,0);
        -webkit-transform: translate(0,0);
    }

js

var oBtn = document.getElementById("btn");
var oModal = document.getElementById("modal");
var oClose = document.getElementById("close");
oBtn.addEventListener("click", function(){
    oModal.style.display = "block";
    oModal.className = "modal in";
});
oClose.addEventListener("click", function(){
    oModal.style.display = "none";
    oModal.className = "modal";
});

是不是看起來(lái)很容易然爆,運(yùn)行之后,誒黍图?并沒(méi)有我們所希望看到的動(dòng)畫效果曾雕,這是為什么呢?當(dāng)我們點(diǎn)擊按鈕的時(shí)候不是已經(jīng)把動(dòng)畫加上了么助被?
其實(shí)仔細(xì)想想剖张,點(diǎn)擊按鈕改變classname的時(shí)候,是一下子把元素display和動(dòng)畫屬性全都加上了揩环,當(dāng)模態(tài)框顯示出來(lái)的時(shí)候動(dòng)畫也隨著完成了搔弄,就類似于打開一個(gè)html頁(yè)面一樣,頁(yè)面元素的css屬性都在頁(yè)面渲染的時(shí)候發(fā)揮了作用丰滑。而我們?cè)陧?yè)面直接去觸發(fā)一個(gè)已經(jīng)顯示出來(lái)的元素動(dòng)畫的時(shí)候是有效的顾犹。所以我們需要把元素顯示和動(dòng)畫分開來(lái)做。這里我做了一個(gè)異步操作(setTimeout)。

   oModal.style.display = "block";
    var timer = setTimeout(function(){
        oModal.className = "modal in";
        clearTimeout(timer);
    },0);

當(dāng)元素顯示出來(lái)之后在給它加動(dòng)畫效果炫刷,這樣就可以實(shí)現(xiàn)我們所期望的動(dòng)畫效果了擎宝。
所有代碼在github上https://github.com/Stevenzwzhai/plugs/tree/master/dialog,在這個(gè)項(xiàng)目下有多個(gè)js的常用插件,歡迎點(diǎn)贊浑玛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍申,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子顾彰,更是在濱河造成了極大的恐慌极阅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拘央,死亡現(xiàn)場(chǎng)離奇詭異涂屁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)灰伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門逸寓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狐援,“玉大人收恢,你說(shuō)我怎么就攤上這事武契。” “怎么了挡爵?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵竖般,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茶鹃,道長(zhǎng)涣雕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任闭翩,我火速辦了婚禮挣郭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疗韵。我一直安慰自己兑障,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布蕉汪。 她就那樣靜靜地躺著流译,像睡著了一般。 火紅的嫁衣襯著肌膚如雪者疤。 梳的紋絲不亂的頭發(fā)上福澡,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音驹马,去河邊找鬼竞漾。 笑死眯搭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的业岁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寇蚊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼笔时!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起仗岸,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤允耿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后扒怖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體较锡,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年盗痒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚂蕴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俯邓,死狀恐怖骡楼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稽鞭,我是刑警寧澤鸟整,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站朦蕴,受9級(jí)特大地震影響篮条,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吩抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一涉茧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琴拧,春花似錦降瞳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沛膳,卻和暖如春扔枫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锹安。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工短荐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倚舀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓忍宋,卻偏偏與公主長(zhǎng)得像痕貌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糠排,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,097評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)舵稠、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,098評(píng)論 4 62
  • 成入宦,如朗月照花哺徊,深潭微瀾,是不論順逆乾闰,不論成敗的超然落追,亦是揚(yáng)鞭策馬,登高臨遠(yuǎn)的驛站涯肩;敗轿钠,仍滴水穿石,江流入海宽菜,窮且...
    害怕黑卻愛(ài)上夜閱讀 203評(píng)論 0 0
  • 漂流瓶:可以把心事寫上去谣膳,飄到有緣的陌生人手里,不管是埋藏在心里的秘密還是不愿意打開的記憶铅乡,都可以放進(jìn)去
    理想DO閱讀 310評(píng)論 0 1
  • 去年冬天继谚,我接了一個(gè)紀(jì)錄片字幕編輯的工作,說(shuō)是編輯字幕阵幸,其實(shí)就是最初級(jí)的將人物對(duì)話一點(diǎn)點(diǎn)敲擊成文字花履。由于人物對(duì)話大...
    向小園子閱讀 475評(píng)論 0 0