jquery를 이용한 레이어 가운대 띄우기 (중앙정렬, 멀티레이어, 가운데 위치 자동조절)

munilive
munilive

jquery를 이용하여 마스크를 현재 창 전체로 씌운 다음 가운데로 원하는 레이어를 띄워주는 함수입니다. 그 외 창 사이즈를 조절하면 자동으로 레이어의 위치도 가운데로 다시 정렬되며, 레이어를 띄운 상태에서 다른 레이어를 또 띄우게 되면 기존 레이어 위에 마스크와 새로운 레이어를 다시 띄우게 됩니다.
미리 보기에서 구현된 내용을 미리 확인해 보세요.

<script type="text/javascript">
  //레이어 가운데 띄우고 마스크 띄우기
  function toggleLayer(obj, s) {
    var zidx = $('#lay_mask').css('z-index');

    if (s == 'on') {
      //화면중앙에 위치시키기
      var left = $(window).scrollLeft() + ($(window).width() - obj.width()) / 2;
      var top = $(window).scrollTop() + ($(window).height() - obj.height()) / 2;

      // 높이가 0이하면 0으로 변경
      if (top < 0) top = 0;
      if (left < 0) left = 0;

      var layer_idx = Number(zidx) + 10;

      $('#lay_mask').css('z-index', layer_idx);

      obj.css({ left: left, top: top, 'z-index': layer_idx }).addClass('PopupLayer');
      $('body').append(obj);

      wrapWindowByMask(); //배경 깔기
      obj.show(); //레이어 띄우기
    }

    if (s == 'off') {
      if ($('.PopupLayer').length > 1) {
        var layer_idx = zidx - 10;
        $('#lay_mask').css('z-index', layer_idx);
      } else {
        $('#lay_mask').hide();
      }

      obj.removeClass('PopupLayer').hide();
    }

    if (s == 'off2') {
      //레이어에서 다른 레이어를 띄울 경우 마스크는 안닫기 위한 처리
      obj.removeClass('PopupLayer').hide();
    }
  }

  //마스크 띄우기
  function wrapWindowByMask() {
    var mask = $('#lay_mask');

    //화면의 높이와 너비를 구한다.
    var maskHeight = $(document).height();
    var maskWidth = $(window).width();

    //마스크의 높이와 너비를 화면 것으로 만들어 전체 화면을 채운다.
    mask.css({ width: maskWidth, height: maskHeight });
    mask.show();
  }

  // 사이즈 리사이징
  function ResizingLayer() {
    if ($('#lay_mask').css('display') == 'block') {
      //화면의 높이와 너비를 구한다.
      var maskHeight = $(document).height();
      var maskWidth = $(window).width();

      //마스크의 높이와 너비를 화면 것으로 만들어 전체 화면을 채운다.
      $('#lay_mask').css({ width: maskWidth, height: maskHeight });

      $('.PopupLayer').each(function () {
        var left = $(window).scrollLeft() + ($(window).width() - $(this).width()) / 2;
        var top = $(window).scrollTop() + ($(window).height() - $(this).height()) / 2;

        if (top < 0) top = 0;
        if (left < 0) left = 0;

        $(this).css({ left: left, top: top });
      });
    }
  }

  window.onresize = ResizingLayer;
</script>

<style type="text/css">
  #lay_mask {
    position: absolute;
    background: black;
    z-index: 100;
    opacity: 0.5;
    filter: alpha(opacity=50);
    background: rgba(0, 0, 0, 0.5);
    filter: progid: DXImageTransform.Microsoft.gradient(startColorstr=#4C000000, endColorstr=#4C000000);
  }
  .PopupLayer {
    position: absolute;
    z-index: 110;
  }
</style>

<div id="lay_mask" style="display: none;"><!-- 마스크로 띄워질 Div --></div>
munilive

munilive

Backend Application Developer

Share

Comments

Related Posts

JQuery : 클래스 이름만으로 페이지 전체에 롤오버 이미지 쉽게 적용하기

JQuery : 클래스 이름만으로 페이지 전체에 롤오버 이미지 쉽게 적용하기

작업중에 얻은 소스를 변경한것. 기존에는 지정한 파일 확장자의 이미지 만을 사용했다면 변경한 것에는 이미지 파일에 상관 없이 클래스명이 일때 무조건 확장자 앞에 의 유무에…

munilive munilive ·
datepicker 시작일과 종료일 설정 시 사용하기 좋은 팁

datepicker 시작일과 종료일 설정 시 사용하기 좋은 팁

웹 프로그래밍을 하다 보면 가끔 시작일과 종료일을 입력받는 프로그램을 제작하곤 한다. 사용자에게 날짜를 입력받아야 하는데 텍스트 박스만 떡하니 놔두면 사용자가 제대로 된 데이터를…

munilive munilive ·
jquery를 이용한 슬라이드(slides)배너

jquery를 이용한 슬라이드(slides)배너

jquery에서 사용할 수 있는 slidesjs라는 좋은 툴이 있지만, 퍼블리셔가 작업해서준 HTML 구조와 CSS 변경 작업이 어려워서 직접 만들었습니다. slidesjs 보…

munilive munilive ·