js実現類のbootstrap型の枠のアニメーション


pcで開発され、モダリティボックスはよく使われていたプラグインです。これまで使っていたサードパーティのプラグインです。例えば、bootstrap、jQueryのモダリティボックスプラグインです。最近はelement UIも使われています。しかし、実际にはアニメーションの効果はほぼ同じですが、どうやってこのようなアニメーション効果を実现しますか?
モールドボックスの構成
よくあるモダリティボックスの構造は簡単にわかります。カバー層とコンテンツエリアがあります。コンテンツエリアは主にヘッダ(タイトル、クローズボタンを含む)とbody部分(bodyでは確認とキャンセルボタンがあります)です。
レイアウト
背景はフルスクリーンに満ちていて、もしページにスクロールがあったら、モーダルボックスが飛び出す時はスクロールできません。
コンテンツエリアは水平中央に表示し、垂直方向は設計を見ます。
 3.モーダルボックスの出現は徐々に明らかになり、上から下に滑ります。
実現する
 フードは最も外側の元素を使ってフルスクリーンを占め、背景色の不透明度(rgba(0,0,0,0.5)を設定します。
 水准は中にたくさんの方式があります。ここで使います。
magin:30 px atot;
重点的に紹介します。モダリティ動画の実現について
 徐々に表示についてはopacityを使ってもいいですが、トップからスライドしてストランライトを使っても簡単に実現できます。そうすれば簡単ですよね。クラスメイトを変えるだけでいいです。
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>
スタイル

.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";
});
簡単に見えますが、運転してからですか?私たちが見たいアニメーション効果がないのはなぜですか?ボタンをクリックした時にはすでにアニメを追加したのではないですか?
実はよく考えてみて、ボタンをクリックしてclassinameを変える時、一気に元素displayとアニメーションの属性をすべて加えたので、モードの枠が表示される時アニメーションも完成に従って、1つのhtmlページを開けるようにして、ページの元素のcssの属性はすべてページでレンダリングする時作用を発揮しました。私達はページで直接に表示された要素アニメーションをトリガする時に有効です。だから、元素の表示とアニメーションを分けて作る必要があります。
ここでは非同期動作をした。

  oModal.style.display = "block";
  var timer = setTimeout(function(){
    oModal.className = "modal in";
    clearTimeout(timer);
  },0);
元素が表示されたら、アニメの効果を加えて、私たちが期待するアニメーション効果を実現できます。
すべてのコードはgithb https://github.com/Stevenzwzhai/plugs/tree/master/dialogで、このプロジェクトの下に複数のjsの常用プラグインがあります。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。