[Bootstrap] 팝오버(popover)


Open source/Bootstrap  2020. 3. 2. 19:31

안녕하세요. 명월입니다.


이 글은 Bootstrap에서 팝오버(popover)에 대한 글입니다.


예전에 제가 Bootstrap의 툴팁(tooltip)에 대해 소개한 적이 있습니다.

링크 - [Bootstrap] 툴팁(tooltip)


팝오버는 이 툴팁이랑 매우 비슷한 컨트롤인데, 툴팁이랑 다이얼로그를 합쳐놓은 컨트롤이라고 생각하면 됩니다.

툴팁은 간단한 설명이나 주석등을 사용하기 위한 컨트롤이면 팝오버는 다이얼로그처럼 알림 사항등에 툴팁처럼 화살표(?)가 있는 다이얼 로그라고 생각하면 됩니다.

링크 - https://getbootstrap.com/docs/3.4/javascript/#popovers

<!DOCTYPE html>
<html>
<head>
  <title>title</title>
  <!-- Bootstrap cdn 설정 -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
  <!-- 버튼을 구성할 영역 설정-->
  <div style="margin:10px;">
    <!-- 태그로 팝오버을 사용하는 방법이다 -->
    <!-- data-toggle에 popover 옵선을 설정한다. data-placement은 팝오버의 방향으로 top, bottom, left, right가 있다.-->
    <!-- title에는 팝오버의 내용을 넣는다. -->
    <button id="popover_btn" data-toggle="popover" title="제목" data-content="예제입니다." data-placement="bottom">버튼</button>
    <script>
    // 팝오버을 실행하기 위해서 script에 popover함수를 실행해야 한다.
    $(function(){
      $('#popover_btn').popover({
        // fade 효과 사용 여부
        animation: true,
        // 팝오버을 나타낼 특정 요소
        container: false,
        // 지연 설정
        delay: {show:500, hide:100},
        // 템필릿
        html: false,
        // html false 경우 지정할 요소 selector
        selector: false,
        // html true일 경우 사용되는 popover 템플릿
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
        // 팝오버 트리거(반응) 이벤트
        trigger: 'hover focus',
        viewport: { selector: 'body', padding: 0 },
        // 방향 (설정하면 요소의 data-placement 설정의 무효된다.)
        //placement: 'bottom',
        // 제목 (설정하면 요소의 title 설정의 무효된다.)
        //title: '',
		// 컨텐츠 값 (설정하면 요소의 data-content값은 무효된다.)
		// content: '',
        //sanitize: true,
        //sanitizeFn: null,
        //whiteList: ''
      });
    });
    </script>
  </div>
</body>
</html>

막상 정리하고 보니깐 tooltip이랑 95%이상 비슷하네요... 다른 점이라고는 data-content가 생긴거 뿐이네요...

이름 유형 기본값 설명
animation boolean true 팝오버에 CSS fade 전환 적용
container string | false false 팝오버을 특정 요소에 추가합니다. 예 : container : "#id". 특정 요소에 팝오버을 배치할 수 있습니다.
delay number | object 0 팝오버의 표시와 숨기기를 나타내는 지연 설정을 할 수 있습니다. delay: { "show": 500, "hide": 100 }
html boolean false 팝오버에 html의 사용여부.
placement string | function 'top' 방향 설정
selector string false html이 false로 지정되면 selector로 popover의 구조를 설정할 수 있음.
template string 기본 html이 true로 지정되면 사용. 팝오버을 만들 때 사용할 기본 HTML입니다.
팝오버 제목이 .popover-title에 삽입됩니다.
컨텐츠 내용은 .popover-content에 들어갑니다.
.arrow는 팝오버의 화살표가됩니다.
가장 바깥 쪽 래퍼 요소에는 .popover 클래스가 있어야합니다.
title string | function '' 팝오버 내용
trigger string 'hover focus 팝오버이 트리거되는 옵션 - click | hover | focus | manual.
viewport string | object | function { selector: 'body', padding: 0 } 이 요소의 범위 내에서 팝오버을 유지합니다. 예 : 뷰포트 : '#viewport'또는 { "selector": "#viewport", "padding": 0}
sanitize boolean true '템플릿'을 활성화하면 '콘텐츠'및 '제목'옵션이 삭제됩니다.(여기는 잘 모르겠네요..)
whiteList object ? Bootstrap에서 사용되는 객체라는 데... 이것도 잘 모르겠네요.
sanitizeFn null | function null sanitize가 true되면 실행되는 함수입니다.

팝오버는 메소드와 이벤트도 있습니다. 이 메소드와 이벤트는 툴팁이랑 똑같습니다.


메소드는 팝오버를 제어하는 함수이고, 이벤트는 팝오버가 표시되거나 제거될 때 호출되는 함수입니다.

<!DOCTYPE html>
<html>
<head>
  <title>title</title>
  <!-- Bootstrap cdn 설정 -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
  <style>
    /* 팝오버은 기본적으로 position이 absolute이기 때문에 초기화로 변형한다. */
    #popover_area .popover {
        position: initial!important;
    }
  </style>
  <!-- 버튼을 구성할 영역 설정-->
  <div style="margin:10px;">
    <!-- 버튼을 누르면 팝오버이 나온다. -->
    <button id="popover_btn">버튼</button>
    <!-- 팝오버을 표시할 영역. -->
    <div id="popover_area" style="border:1px solid;height:100px;">
    </div>
    <script>
    $(function(){
      $('#popover_btn').popover({
        // fade 효과 설정
        animation: true,
        // 팝오버을 표시할 컨테이너 설정
        container: "#popover_area",
        // 팝오버 표시 틸레이
        delay: {show:50, hide:10},
        // template 사용한다.
        html: true,
        // 팝오버 template 제목은 popover-title, 내용은 popover-content에 들어간다.
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
        // 팝오버 제목
        title: '팝 오버',
		// 팝오버 내용
		content: '내용',
		// 팝오버 이벤트는 수동.
        trigger: 'manual'
      });
      // 버튼 클릭 이벤트
      $('#popover_btn').on("click", function(){
        // toggle 함수는 팝오버가 show상태면 hide로 hide면 show를 실행한다.
        // 함수의 종류는 show, hide, toggle있다.
        $('#popover_btn').popover('toggle');
        // destroy 함수도 존재하는데 이는 popover를 해제하는 함수이다.
      });
      // 팝오버 이벤트로 팝오버이 표시 되기 전의 이벤트이다.
      $('#popover_btn').on('show.bs.popover', function () {
        // 첫번째로 실행되는 이벤트
      });
      // 팝오버 이벤트로 팝오버이 표시 된 후의 이벤트이다.
      $('#popover_btn').on('shown.bs.popover', function () {
        // 세번째로 실행되는 이벤트
      });
      // 팝오버 이벤트로 팝오버이 비표시 되기 전의 이벤트이다.
      $('#popover_btn').on('hide.bs.popover', function () {
        // 네번째로 실행되는 이벤트
      });
      // 팝오버 이벤트로 팝오버이 비표시 된 후의 이벤트이다.
      $('#popover_btn').on('hidden.bs.popover', function () {
        // 다섯번째로 실행되는 이벤트
      });
      // 팝오버 이벤트로 팝오버이 template이 컨테이너에 들어간 후의 이벤트이다.
      $('#popover_btn').on('inserted.bs.popover', function () {
        // 두번째로 실행되는 이벤트
      });
    });
    </script>
  </div>
</body>
</html>

여기까지 Bootstrap에서 팝오버(popover)에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.