欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年10月11日 11:39:19   作者:Stevenzhai  
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)類(lèi)bootstrap模態(tài)框動(dòng)畫(huà)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

模態(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)畫(huà)的實(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">×</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)畫(huà)效果,這是為什么呢?當(dāng)我們點(diǎn)擊按鈕的時(shí)候不是已經(jīng)把動(dòng)畫(huà)加上了么?

其實(shí)仔細(xì)想想,點(diǎn)擊按鈕改變classname的時(shí)候,是一下子把元素display和動(dòng)畫(huà)屬性全都加上了,當(dāng)模態(tài)框顯示出來(lái)的時(shí)候動(dòng)畫(huà)也隨著完成了,就類(lèi)似于打開(kāi)一個(gè)html頁(yè)面一樣,頁(yè)面元素的css屬性都在頁(yè)面渲染的時(shí)候發(fā)揮了作用。而我們?cè)陧?yè)面直接去觸發(fā)一個(gè)已經(jīng)顯示出來(lái)的元素動(dòng)畫(huà)的時(shí)候是有效的。所以我們需要把元素顯示和動(dòng)畫(huà)分開(kāi)來(lái)做。

這里我做了一個(gè)異步操作(setTimeout)。

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

元素顯示出來(lái)之后在給它加動(dòng)畫(huà)效果,這樣就可以實(shí)現(xiàn)我們所期望的動(dòng)畫(huà)效果了。
所有代碼在github上,在這個(gè)項(xiàng)目下有多個(gè)js的常用插件,歡迎點(diǎn)贊。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript 數(shù)組的進(jìn)化與性能分析

    JavaScript 數(shù)組的進(jìn)化與性能分析

    這篇文章主要介紹了JavaScript 數(shù)組的進(jìn)化與性能分析,本文講得更多的是內(nèi)存、優(yōu)化、語(yǔ)法差異、性能、近來(lái)的演進(jìn)。需要的朋友可以參考下
    2017-09-09
  • javascript數(shù)組的擴(kuò)展實(shí)現(xiàn)代碼集合

    javascript數(shù)組的擴(kuò)展實(shí)現(xiàn)代碼集合

    非常不錯(cuò)的javascript數(shù)據(jù)功能增強(qiáng)函數(shù)
    2008-06-06
  • 淺談javascript中遇到的字符串對(duì)象處理

    淺談javascript中遇到的字符串對(duì)象處理

    下面小編就為大家?guī)?lái)一篇淺談javascript中遇到的字符串對(duì)象處理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • 始終在屏幕中間顯示Div的代碼(css+js)

    始終在屏幕中間顯示Div的代碼(css+js)

    如何始終在屏幕中間顯示Div需要的朋友可以參考下。
    2011-03-03
  • 使用javascript實(shí)現(xiàn)雪花飄落的效果

    使用javascript實(shí)現(xiàn)雪花飄落的效果

    本文主要介紹了使用javascript實(shí)現(xiàn)雪花飄落的特效,雖然網(wǎng)上有很多,不過(guò)都是比較陳舊了,兼容性不是太好,于是動(dòng)手寫(xiě)一個(gè),把思路和實(shí)現(xiàn)代碼都分享給大家。
    2015-01-01
  • ajax java 實(shí)現(xiàn)自動(dòng)完成功能

    ajax java 實(shí)現(xiàn)自動(dòng)完成功能

    都知道百度建議是用ajax做的,想要做的快速穩(wěn)定,可復(fù)制可移植就不容易了,花時(shí)間研究還不如自己來(lái)寫(xiě)。根據(jù)一個(gè)pdf文檔提供的資料,用了小半天時(shí)間,終于實(shí)現(xiàn)了。在此與大家分享
    2012-12-12
  • 微信小程序下拉框組件使用方法詳解

    微信小程序下拉框組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序下拉框組件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • js中string和number類(lèi)型互轉(zhuǎn)換技巧(分享)

    js中string和number類(lèi)型互轉(zhuǎn)換技巧(分享)

    下面小編就為大家?guī)?lái)一篇js中string和number類(lèi)型互轉(zhuǎn)換技巧(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • 檢查JavaScript對(duì)象屬性是否存在的方法小結(jié)

    檢查JavaScript對(duì)象屬性是否存在的方法小結(jié)

    在前端開(kāi)發(fā)面試,面試官提出了一個(gè)經(jīng)典的JavaScript問(wèn)題:“在JavaScript中,如何檢查對(duì)象是否包含某個(gè)屬性?請(qǐng)你詳細(xì)介紹幾種不同的方法,并解釋它們的區(qū)別,”這個(gè)問(wèn)題考驗(yàn)?zāi)銓?duì)JavaScript的基礎(chǔ)掌握情況,讓我們進(jìn)入這個(gè)面試場(chǎng)景,需要的朋友可以參考下
    2024-09-09
  • JS中offset和勻速動(dòng)畫(huà)詳解

    JS中offset和勻速動(dòng)畫(huà)詳解

    這篇文章主要介紹了JavaScript動(dòng)畫(huà):offset和勻速動(dòng)畫(huà)詳解(含輪播圖的實(shí)現(xiàn)),并把實(shí)現(xiàn)代碼做了分享,有興趣的朋友參考下。
    2018-02-02

最新評(píng)論