2019/12/16

上から出てくるモーダルのサンプルコード









上から出てくるモーダルのサンプルです。
メインの要素の他に、透明な黒背景と、ちょっと遅れて表示される閉じるボタンがあります。

モーダル上でスクロールしても下の要素はスクロールしないようになっています。

See the Pen 上から出てくるモーダル by takapen (@takapen) on CodePen.







top open btn

contents





body {
  height: 5000px;
  background: #ccc;
}
body._fixed {
 position: fixed;
}
.top-open__area {
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.5);
  position: fixed;
  left: 0;
  top: 0;
  z-index: 100;
  display: none;
}



.top-open__area--main {
 width: 100%;
 height: 100%;
  margin-top: -1000px;
 background: #ffe7e7;
 position: fixed;
 top: 0;
  left: 0;
 overflow-x: scroll;
}
.top-open__btn--close {
  display: none;
}
.top-open__btn--close:after {
  content: "";
  width: 35px;
  height: 35px;
    background: #ccc;
  position: absolute;
  top: 4px;
  left: 262px;
}



jquery使用
$(function(){

  var scrollPosition;

  $('#js-top-open__btn').on('click touched', function(){
    scrollPosition = $(window).scrollTop();
    $('body').addClass('_fixed').css({'top': -scrollPosition});
    $('#js-top-open__area').fadeIn(100);
    $('#js-top-open__area--main').animate({'marginTop':'0'},300);
    setTimeout(function(){
      $('#js-top-open__btn--close').fadeIn(100);
    },400);
  });

  $('#js-top-open__btn--close').on('click touched', function(){
    $('body').removeClass('_fixed').css({'top': 0});
    window.scrollTo( 0 , scrollPosition );
    $('#js-top-open__btn--close').fadeOut(100);
    setTimeout(function(){
    $('#js-top-open__area--main').animate({'marginTop':'-1000px'},300);
    },200);
    setTimeout(function(){
      $('#js-top-open__area').fadeOut(100);
    },400);
  });

  $('#js-top-open__area--main').on('click', function (e) {
    e.stopPropagation();
  });

});