"광주 문화예술 인문스토리 플랫폼2"의 두 판 사이의 차이

광주문화예술인문스토리플랫폼
이동: 둘러보기, 검색
1번째 줄: 1번째 줄:
 
{{#tag:html|
 
{{#tag:html|
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
 
  <link
 
    rel="stylesheet"
 
    href="https://cdn.jsdelivr.net/npm/keen-slider@6.8.5/keen-slider.min.css"
 
  />
 
  <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
 
  <body
 
    class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-광주_문화예술_인문스토리_플랫폼 rootpage-광주_문화예술_인문스토리_플랫폼 skin-etbskin action-view page-gwangju-munhwayesul-inmunseutori-peulraespom4 page-ontologyekc-gwangju"
 
    style="position: relative"
 
  >
 
    <!-- 이트라이브 수정 -->
 
    <script>
 
      document.addEventListener('DOMContentLoaded', function () {
 
        const navItems = document.querySelectorAll('.gnb-list .one-depth');
 
        const gnbArea = document.querySelector('.gnb-area');
 
        const twoDepthBoxes = document.querySelectorAll('.two-depth-bx');
 
 
        function activateGnbArea() {
 
          gnbArea.classList.add('active');
 
        }
 
 
        function deactivateGnbArea() {
 
          gnbArea.classList.remove('active');
 
        }
 
 
        navItems.forEach(item => {
 
          const link = item.querySelector('a');
 
 
          link.addEventListener('mouseenter', activateGnbArea);
 
          link.addEventListener('mouseleave', deactivateGnbArea);
 
 
          link.addEventListener('focus', activateGnbArea);
 
          link.addEventListener('blur', deactivateGnbArea);
 
        });
 
 
        twoDepthBoxes.forEach(box => {
 
          box.addEventListener('mouseenter', activateGnbArea);
 
          box.addEventListener('mouseleave', deactivateGnbArea);
 
 
          box.addEventListener('focusin', activateGnbArea);
 
          box.addEventListener('focusout', function (e) {
 
            if (!box.contains(e.relatedTarget)) {
 
              deactivateGnbArea();
 
            }
 
          });
 
        });
 
 
        // Handle when mouse leaves the entire gnb-area
 
        gnbArea.addEventListener('mouseleave', deactivateGnbArea);
 
      });
 
    </script>
 
   
 
    <!-- //이트라이브 수정 -->
 
    <!-- navbar -->
 
    <div class="navbar navbar-default navbar-fixed-top" id="mw-navigation" role="navigation">
 
      <h2>둘러보기 메뉴</h2>
 
      <!-- <div id="mw-head" class="navbar-inner">
 
<div class="container">
 
 
<div class="navbar-header">
 
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
 
<span class="sr-only">Toggle navigation</span>
 
<span class="icon-bar"></span>
 
<span class="icon-bar"></span>
 
<span class="icon-bar"></span>
 
</button>
 
 
<a href="/wiki/index.php/%EB%8C%80%EB%AC%B8" class="navbar-brand">광주문화예술인문스토리플랫폼</a>
 
</div>
 
 
<div id="navbar" class="navbar-collapse collapse">
 
<ul class="nav navbar-nav">
 
<li class="one-depth"><a href="/wiki/index.php/%EC%86%8C%EA%B0%9C" id="n-.EC.86.8C.EA.B0.9C">사업소개</a></li><li class="one-depth"><a href="#" id="n-.ED.9E.88.EC.8A.A4.ED.86.A0.EB.A6.AC" class="dropdown-toggle" data-toggle="dropdown">히스토리 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-Ontology:EKC_.EA.B4.91.EC.A3.BC" class="active"><a href="/wiki/index.php/Ontology:EKC_%EA%B4%91%EC%A3%BC" tabindex="-1">온톨로지</a></li><li id="n-.ED.8E.B8.EC.B0.AC.ED.95.AD.EB.AA.A9:Class:.EB.AA.A9.EB.A1.9D"><a href="/wiki/index.php/%ED%8E%B8%EC%B0%AC%ED%95%AD%EB%AA%A9:Class:%EB%AA%A9%EB%A1%9D" tabindex="-1">콘텐츠 편찬현황</a></li><li id="n-.EC.B0.B8.EA.B3.A0.EB.AC.B8.ED.97.8C"><a href="/wiki/index.php/%EC%B0%B8%EA%B3%A0%EB%AC%B8%ED%97%8C" tabindex="-1">참고문헌</a></li><li id="n-.EC.B0.B8.EA.B3.A0.EC.9E.90.EB.A3.8C"><a href="/wiki/index.php/%EC%B0%B8%EA%B3%A0%EC%9E%90%EB%A3%8C" tabindex="-1">참고자료</a></li></ul></li><li class="one-depth"><a href="#" id="n-.EC.9D.B8.EB.AC.B8.EC.8A.A4.ED.86.A0.EB.A6.AC-.EB.84.A4.ED.8A.B8.EC.9B.8C.ED.81.AC" class="dropdown-toggle" data-toggle="dropdown">인문스토리 네트워크 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-.EC.8B.9C.EB.A7.A8.ED.8B.B1_.EB.8D.B0.EC.9D.B4.ED.84.B0_.EB.84.A4.ED.8A.B8.EC.9B.8C.ED.81.AC"><a href="/wiki/index.php/%EC%8B%9C%EB%A7%A8%ED%8B%B1_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC" tabindex="-1">인문스토리 네트워크</a></li></ul></li><li class="one-depth"><a href="#" id="n-.EC.9D.B8.EB.AC.B8.EC.8A.A4.ED.86.A0.EB.A6.AC-.EC.BB.A8.ED.85.90.EC.B8.A0" class="dropdown-toggle" data-toggle="dropdown">인문스토리 컨텐츠 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-.EB.B6.84.EB.A5.98:Actor"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Actor" tabindex="-1">인물/단체(Actor)</a></li><li id="n-.EB.B6.84.EB.A5.98:Concept"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Concept" tabindex="-1">개념/용어(Concept)</a></li><li id="n-.EB.B6.84.EB.A5.98:event"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Event" tabindex="-1">사건(event)</a></li><li id="n-.EB.B6.84.EB.A5.98:food"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Food" tabindex="-1">음식(Food)</a></li><li id="n-.EB.B6.84.EB.A5.98:Object"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Object" tabindex="-1">사물(Object)</a></li><li id="n-.EB.B6.84.EB.A5.98:Place"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Place" tabindex="-1">장소(Place)</a></li><li id="n-.EB.B6.84.EB.A5.98:Architecture"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Architecture" tabindex="-1">건축물(Architecture)</a></li><li id="n-.EB.B6.84.EB.A5.98:Record"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:Record" tabindex="-1">기록물(Record)</a></li><li id="n-.EB.B6.84.EB.A5.98:.EB.AC.B8.EB.A7.A5.ED.95.AD.EB.AA.A9"><a href="/wiki/index.php/%EB%B6%84%EB%A5%98:%EB%AC%B8%EB%A7%A5%ED%95%AD%EB%AA%A9" tabindex="-1">문맥항목</a></li><li id="n-.EC.8A.A4.ED.86.A0.EB.A6.AC_.EB.AA.A9.EB.A1.9D"><a href="/wiki/index.php/%EC%8A%A4%ED%86%A0%EB%A6%AC_%EB%AA%A9%EB%A1%9D" tabindex="-1">스토리(Story)</a></li></ul></li><li class="one-depth"><a href="#" id="n-.EC.9D.B8.EB.AC.B8-.EB.A9.94.ED.83.80.EB.B2.84.EC.8A.A4" class="dropdown-toggle" data-toggle="dropdown">인문-메타버스 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-metaverse"><a href="/wiki/index.php/Metaverse" tabindex="-1">메타버스</a></li><li id="n-.EC.8A.A4.ED.86.A0.EB.A6.AC_.EB.AA.A9.EB.A1.9D"><a href="/wiki/index.php/%EC%8A%A4%ED%86%A0%EB%A6%AC_%EB%AA%A9%EB%A1%9D" tabindex="-1">스토리 컨텐츠</a></li></ul></li><li class="one-depth"><a href="#" id="n-.EC.9D.B8.EB.AC.B8-.EC.95.84.EC.B9.B4.EC.9D.B4.EB.B8.8C" class="dropdown-toggle" data-toggle="dropdown">인문-아카이브 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-3D_.EC.96.B4.EC.85.8B_.EB.AA.A9.EB.A1.9D"><a href="/wiki/index.php/3D_%EC%96%B4%EC%85%8B_%EB%AA%A9%EB%A1%9D" tabindex="-1">3D 어셋</a></li><li id="n-video"><a href="/wiki/index.php/Video" tabindex="-1">Video</a></li><li id="n-.EC.82.AC.EC.A7.84_.EC.9E.90.EB.A3.8C.EA.B4.80"><a href="/wiki/index.php/%EC%82%AC%EC%A7%84_%EC%9E%90%EB%A3%8C%EA%B4%80" tabindex="-1">사진자료관</a></li><li id="n-.EA.B9.80.ED.99.8D.EC.9D.B8_.EC.82.AC.EC.A7.84.EA.B4.80"><a href="/wiki/index.php/%EA%B9%80%ED%99%8D%EC%9D%B8_%EC%82%AC%EC%A7%84%EA%B4%80" tabindex="-1">김홍인 사진관</a></li><li id="n-.EA.B4.91.EC.A3.BC_.EC.9E.90.EB.A3.8C.EA.B4.80"><a href="/wiki/index.php/%EA%B4%91%EC%A3%BC_%EC%9E%90%EB%A3%8C%EA%B4%80" tabindex="-1">광주자료관</a></li><li id="n-https:.2F.2Fdaedong-mobile-web.vercel.app.2F"><a href="https://daedong-mobile-web.vercel.app/" rel="nofollow" target="_blank" tabindex="-1">AR 체험</a></li></ul></li><li class="one-depth"><a href="#" id="n-.EC.9D.B8.EB.AC.B8.EC.8A.A4.ED.86.A0.EB.A6.AC-.EA.B5.90.EC.9C.A1" class="dropdown-toggle" data-toggle="dropdown">인문스토리-교육 <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="n-2023_.EA.B5.90.EC.9C.A1.EC.9E.90.EB.A3.8C.28.EC.8B.9C.EB.AF.BC.EA.B5.90.EC.9C.A1.29"><a href="/wiki/index.php/2023_%EA%B5%90%EC%9C%A1%EC%9E%90%EB%A3%8C(%EC%8B%9C%EB%AF%BC%EA%B5%90%EC%9C%A1)" tabindex="-1">2023시민교육</a></li><li id="n-2023_.EA.B5.90.EC.9C.A1.EC.9E.90.EB.A3.8C.28.EB.94.94.EC.A7.80.ED.84.B8.EC.9E.91.EA.B0.80.29"><a href="/wiki/index.php/2023_%EA%B5%90%EC%9C%A1%EC%9E%90%EB%A3%8C(%EB%94%94%EC%A7%80%ED%84%B8%EC%9E%91%EA%B0%80)" tabindex="-1">작가교육</a></li></ul></li>                            </ul>
 
 
<ul class="nav navbar-nav navbar-right">
 
<li class="one-depth"><a href="#" id="t-tools" class="dropdown-toggle" data-toggle="dropdown"><span class='glyphicon glyphicon-cog'></span> <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="t-cite"><a href="/wiki/index.php?title=%ED%8A%B9%EC%88%98:%EC%9D%B4%EB%AC%B8%EC%84%9C%EC%9D%B8%EC%9A%A9&amp;page=Ontology%3AEKC_%EA%B4%91%EC%A3%BC&amp;id=22594" tabindex="-1" title="이 문서를 인용하는 방법에 대한 정보">이 문서 인용하기</a></li><li id="t-info"><a href="/wiki/index.php?title=Ontology:EKC_%EA%B4%91%EC%A3%BC&amp;action=info" tabindex="-1" title="이 문서에 대한 자세한 정보">문서 정보</a></li><li id="t-permalink"><a href="/wiki/index.php?title=Ontology:EKC_%EA%B4%91%EC%A3%BC&amp;oldid=22594" tabindex="-1" title="문서의 이 판에 대한 고유링크">고유 링크</a></li><li id="t-print"><a href="/wiki/index.php?title=Ontology:EKC_%EA%B4%91%EC%A3%BC&amp;printable=yes" rel="alternate" tabindex="-1" title="이 문서의 인쇄용 판 [p]" accesskey="p">인쇄용 판</a></li><li class="divider" /><li id="t-specialpages"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%ED%8A%B9%EC%88%98%EB%AC%B8%EC%84%9C" tabindex="-1" title="모든 특수 문서의 목록 [q]" accesskey="q">특수 문서 목록</a></li><li id="t-upload"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%EC%98%AC%EB%A6%AC%EA%B8%B0" tabindex="-1" title="파일 올리기 [u]" accesskey="u">파일 올리기</a></li><li id="t-recentchangeslinked"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%EB%A7%81%ED%81%AC%EC%B5%9C%EA%B7%BC%EB%B0%94%EB%80%9C/Ontology:EKC_%EA%B4%91%EC%A3%BC" rel="nofollow" tabindex="-1" title="이 문서에서 링크한 문서의 최근 바뀜 [k]" accesskey="k">가리키는 글의 최근 바뀜</a></li><li class="divider" /><li id="t-whatlinkshere"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%EA%B0%80%EB%A6%AC%ED%82%A4%EB%8A%94%EB%AC%B8%EC%84%9C/Ontology:EKC_%EA%B4%91%EC%A3%BC" tabindex="-1" title="여기를 가리키는 모든 위키 문서의 목록 [j]" accesskey="j">여기를 가리키는 문서</a></li></ul></li><li class="one-depth"><a href="#" id="pt-personaltools" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span> <span class="tweeki-username">Admin</span> <b class="caret"></b></a><ul class="dropdown-menu " role="menu"><li id="pt-userpage"><a href="/wiki/index.php/%EC%82%AC%EC%9A%A9%EC%9E%90:Admin" class="new" dir="auto" title="내 사용자 문서 [.]" accesskey=".">Admin</a></li><li id="pt-mytalk"><a href="/wiki/index.php/%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:Admin" class="new" title="내 토론 문서 [n]" accesskey="n">토론</a></li><li class="divider" /><li id="pt-preferences"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95" title="사용자 환경 설정">환경 설정</a></li><li id="pt-watchlist"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%EC%A3%BC%EC%8B%9C%EB%AC%B8%EC%84%9C%EB%AA%A9%EB%A1%9D" title="주시문서에 대한 바뀜 목록 [l]" accesskey="l">주시문서 목록</a></li><li id="pt-mycontris"><a href="/wiki/index.php/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Admin" title="내 기여 목록 [y]" accesskey="y">기여</a></li><li class="divider" /><li id="pt-logout"><a href="/wiki/index.php?title=%ED%8A%B9%EC%88%98:%EB%A1%9C%EA%B7%B8%EC%95%84%EC%9B%83&amp;returnto=Ontology%3AEKC+%EA%B4%91%EC%A3%BC&amp;logoutToken=c91277c1623040ff7e9c816d895b25e568537da1%2B%5C" title="로그아웃">로그아웃</a></li></ul></li></ul>
 
<form class="navbar-form navbar-right" action="/wiki/index.php" id="searchform">
 
<div class="form-group">
 
<label for="wpSearch" class="hidden-xs">
 
검색
 
</label><input type="search" name="search" placeholder="검색" title="광주문화예술인문스토리플랫폼 검색 [f]" accesskey="f" id="wpSearch" class="search-query form-control"/><input type="submit" name="go" value="보기" title="이 이름의 문서가 존재하면 그 문서로 바로 가기" id="mw-searchButton" class="searchButton btn"/>
 
</div>
 
</form>                        </ul>
 
</div>
 
 
</div>
 
</div> -->
 
    </div>
 
    <!-- /navbar -->
 
    <div id="mw-page-base"></div>
 
    <div id="mw-head-base"></div>
 
    <a id="top"> </a>
 
 
    <!-- content -->
 
    <div class="user-loggedin editable container with-navbar with-navbar-fixed" id="contentwrapper">
 
 
       <!-- 에디터 컨텐츠 등록 영역 -->
 
       <!-- 에디터 컨텐츠 등록 영역 -->
 
       <div class="gwangju-main-wrap">
 
       <div class="gwangju-main-wrap">
709번째 줄: 614번째 줄:
 
         <!-- //AR Heritage 영역 -->
 
         <!-- //AR Heritage 영역 -->
 
       </div>
 
       </div>
       <!-- // 에디터 컨텐츠 등록 영역 -->
+
       <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
    </div>
+
      <link
    <!-- /content -->
+
        rel="stylesheet"
 +
        href="https://cdn.jsdelivr.net/npm/keen-slider@6.8.5/keen-slider.min.css"
 +
      />
 +
      <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
 +
      <script src="https://cdn.jsdelivr.net/npm/keen-slider@6.8.5/keen-slider.min.js"></script>
 +
      <script>
 +
        let swiperInstance = null;
  
    <!-- sidebar-right -->
+
         const initSwiper = () => {
    <div class="sidebar-wrapper sidebar-right-wrapper">
+
          // 모바일에서만 Swiper 초기화
      <div class="sidebar-container container">
+
          if (window.innerWidth < 768) {
        <div class="row">
+
            swiperInstance = new Swiper('.main-visual-swiper', {
          <div class="col-md-3 col-md-offset-9" id="sidebar-right">
+
              direction: 'horizontal',
            <div class="btn-group btn-block">
+
              slidesPerView: 1,
              <a
+
              spaceBetween: 0,
                class="btn btn-primary btn-block"
+
              pagination: {
                href="/wiki/index.php?title=Ontology:EKC_%EA%B4%91%EC%A3%BC&amp;action=edit&amp;etbeditor=1"
+
                el: '.swiper-fraction',
                id="ca-etbeditor"
+
                type: 'bullets',
                name="ca-etbeditor-ext"
+
                clickable: true, // Bullet 클릭 가능
              >
+
              },
                <span class="glyphicon glyphicon-etb-editor"> </span>
+
            });
                입력기
 
              </a>
 
            </div>
 
            <div class="btn-group btn-block">
 
              <a
 
                accesskey="e"
 
                class="btn btn-primary btn-block"
 
                href="/wiki/index.php?title=Ontology:EKC_%EA%B4%91%EC%A3%BC&amp;action=edit"
 
                id="ca-edit"
 
                title="이 문서 편집하기 [alt-shift-e]"
 
              >
 
                <span class="glyphicon glyphicon-pencil"> </span>
 
                Edit
 
              </a>
 
            </div>
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
    <div id="tweekiTOC">
 
      <div class="toctitle" dir="ltr" lang="ko">
 
        <h2>
 
          목차
 
          <a href="javascript:scrollTo(0,0);"> to top </a>
 
        </h2>
 
        <span class="toctoggle">
 
          &nbsp;[
 
          <a class="togglelink" role="button" tabindex="0"> 숨기기 </a>
 
          ]&nbsp;
 
        </span>
 
        <button class="mw-btn-toc-unfold" type="button">
 
          <span> 접어두기 </span>
 
        </button>
 
      </div>
 
      <div class="toc" id="toc" style="display: table">
 
        <ul class="nav">
 
          <li class="toclevel-1 tocsection-1">
 
            <a href="#EKC_.EB.8D.B0.EC.9D.B4.ED.84.B0_.EB.AA.A8.EB.8D.B8">
 
              <span class="tocnumber"> 1 </span>
 
              <span class="toctext"> EKC 데이터 모델 </span>
 
            </a>
 
          </li>
 
          <li class="toclevel-1 tocsection-2">
 
            <a
 
              href="#EKC_.EC.98.A8.ED.86.A8.EB.A1.9C.EC.A7.80.28EKC_Data_Model.29_.EC.9A.B4.EC.9A.A9_.EB.B0.8F_.ED.99.95.EC.9E.A5_.ED.94.84.EB.A1.9C.EC.84.B8.EC.8A.A4"
 
            >
 
              <span class="tocnumber"> 2 </span>
 
              <span class="toctext"> EKC 온톨로지(EKC Data Model) 운용 및 확장 프로세스 </span>
 
            </a>
 
          </li>
 
          <li class="toclevel-1 tocsection-3">
 
            <a href="#EKC_.EA.B4.91.EC.A3.BC">
 
              <span class="tocnumber"> 3 </span>
 
              <span class="toctext"> EKC 광주 </span>
 
            </a>
 
            <ul class="nav">
 
              <li class="toclevel-2 tocsection-4">
 
                <a href="#EKC_.EA.B4.91.EC.A3.BC_Class_.EB.AA.85.EC.84.B8">
 
                  <span class="tocnumber"> 3.1 </span>
 
                  <span class="toctext"> EKC 광주 Class 명세 </span>
 
                </a>
 
              </li>
 
              <li class="toclevel-2 tocsection-5">
 
                <a href="#EKC_.EA.B4.91.EC.A3.BC_Relation_.28Object_Property.29_.EB.AA.85.EC.84.B8">
 
                  <span class="tocnumber"> 3.2 </span>
 
                  <span class="toctext"> EKC 광주 Relation (Object Property) 명세 </span>
 
                </a>
 
              </li>
 
              <li class="toclevel-2 tocsection-6">
 
                <a href="#EKC_.EA.B4.91.EC.A3.BC_Relation_.EC.82.AC.EC.9A.A9_.EC.9A.A9.EB.A1.80">
 
                  <span class="tocnumber"> 3.3 </span>
 
                  <span class="toctext"> EKC 광주 Relation 사용 용례 </span>
 
                </a>
 
              </li>
 
            </ul>
 
          </li>
 
         </ul>
 
      </div>
 
    </div>
 
    <!-- /sidebar-right -->
 
 
 
 
 
    <script>
 
      let swiperInstance = null;
 
 
 
      const initSwiper = () => {
 
        // 모바일에서만 Swiper 초기화
 
        if (window.innerWidth < 768) {
 
          swiperInstance = new Swiper('.main-visual-swiper', {
 
            direction: 'horizontal',
 
            slidesPerView: 1,
 
            spaceBetween: 0,
 
            pagination: {
 
              el: '.swiper-fraction',
 
              type: 'bullets',
 
              clickable: true, // Bullet 클릭 가능
 
            },
 
          });
 
        }
 
      };
 
 
 
      const destroySwiper = () => {
 
        if (swiperInstance) {
 
          swiperInstance.destroy(true, true);
 
          swiperInstance = null;
 
        }
 
      };
 
 
 
      // 초기화
 
      initSwiper();
 
 
 
      // 윈도우 리사이즈 시 Swiper 재설정
 
      window.addEventListener('resize', () => {
 
        if (window.innerWidth < 768) {
 
          if (!swiperInstance) {
 
            initSwiper();
 
 
           }
 
           }
         } else if (window.innerWidth >= 768) {
+
         };
          if (swiperInstance) {
 
            destroySwiper();
 
          }
 
        }
 
      });
 
    </script>
 
    <script>
 
      document.addEventListener('DOMContentLoaded', function () {
 
        const storyLinks = document.querySelectorAll('.story-link-item');
 
        const imageContainer = document.querySelector('.image-scroll-container');
 
        const breakpoint = window.matchMedia('(max-width: 991px)');
 
        let swiperInstance;
 
  
         const initDesktop = () => {
+
         const destroySwiper = () => {
 
           if (swiperInstance) {
 
           if (swiperInstance) {
 
             swiperInstance.destroy(true, true);
 
             swiperInstance.destroy(true, true);
 
             swiperInstance = null;
 
             swiperInstance = null;
 
           }
 
           }
 +
        };
  
          storyLinks.forEach(link => {
+
        // 초기화
            link.addEventListener('click', function (e) {
+
        initSwiper();
              e.preventDefault();
 
              storyLinks.forEach(l => l.classList.remove('active'));
 
              document.querySelectorAll('.swiper-slide').forEach(i => i.classList.remove('active'));
 
  
               this.classList.add('active');
+
        // 윈도우 리사이즈 시 Swiper 재설정
              const targetId = this.getAttribute('data-target');
+
        window.addEventListener('resize', () => {
              const targetImage = document.getElementById(targetId);
+
          if (window.innerWidth < 768) {
              if (targetImage) {
+
            if (!swiperInstance) {
                targetImage.classList.add('active');
+
               initSwiper();
 +
            }
 +
          } else if (window.innerWidth >= 768) {
 +
            if (swiperInstance) {
 +
              destroySwiper();
 +
            }
 +
          }
 +
        });
 +
        document.addEventListener('DOMContentLoaded', function () {
 +
          const storyLinks = document.querySelectorAll('.story-link-item');
 +
          const imageContainer = document.querySelector('.image-scroll-container');
 +
          const breakpoint = window.matchMedia('(max-width: 991px)');
 +
          let swiperInstance;
  
                 const containerRect = imageContainer.getBoundingClientRect();
+
          const initDesktop = () => {
                const imageRect = targetImage.getBoundingClientRect();
+
            if (swiperInstance) {
                const scrollTop =
+
              swiperInstance.destroy(true, true);
                  imageContainer.scrollTop +
+
              swiperInstance = null;
                  (imageRect.top - containerRect.top) -
+
            }
                  containerRect.height / 2 +
+
 
                  imageRect.height / 2;
+
            storyLinks.forEach(link => {
 +
              link.addEventListener('click', function (e) {
 +
                 e.preventDefault();
 +
                storyLinks.forEach(l => l.classList.remove('active'));
 +
                document
 +
                  .querySelectorAll('.swiper-slide')
 +
                  .forEach(i => i.classList.remove('active'));
 +
 
 +
                this.classList.add('active');
 +
                const targetId = this.getAttribute('data-target');
 +
                const targetImage = document.getElementById(targetId);
 +
                if (targetImage) {
 +
                  targetImage.classList.add('active');
 +
 
 +
                  const containerRect = imageContainer.getBoundingClientRect();
 +
                  const imageRect = targetImage.getBoundingClientRect();
 +
                  const scrollTop =
 +
                    imageContainer.scrollTop +
 +
                    (imageRect.top - containerRect.top) -
 +
                    containerRect.height / 2 +
 +
                    imageRect.height / 2;
  
                imageContainer.scrollTo({
+
                  imageContainer.scrollTo({
                  top: scrollTop + 0,
+
                    top: scrollTop + 0,
                  behavior: 'smooth',
+
                    behavior: 'smooth',
                });
+
                  });
               }
+
                }
 +
               });
 
             });
 
             });
           });
+
           };
        };
 
  
        const initMobile = () => {
+
          const initMobile = () => {
          swiperInstance = new Swiper('.image-scroll-container.swiper', {
+
            swiperInstance = new Swiper('.image-scroll-container.swiper', {
            direction: 'horizontal',
+
              direction: 'horizontal',
            slidesPerView: 1.1,
+
              slidesPerView: 1.1,
            spaceBetween: 16,
+
              spaceBetween: 16,
            pagination: {
+
              pagination: {
              el: '.swiper-fraction',
+
                el: '.swiper-fraction',
              type: 'fraction',
+
                type: 'fraction',
              formatFractionCurrent: number => number,
+
                formatFractionCurrent: number => number,
              formatFractionTotal: number => number,
+
                formatFractionTotal: number => number,
            },
 
            on: {
 
              init: () => {
 
                updateProgress();
 
 
               },
 
               },
               slideChange: () => {
+
               on: {
                updateProgress();
+
                init: () => {
 +
                  updateProgress();
 +
                },
 +
                slideChange: () => {
 +
                  updateProgress();
 +
                },
 
               },
 
               },
             },
+
             });
           });
+
          };
        };
+
 
 +
          const updateProgress = () => {
 +
            if (!swiperInstance) return;
 +
            const current = swiperInstance.realIndex + 1;
 +
            const total = swiperInstance.slides.length;
 +
            const percent = (current / total) * 100;
 +
            const progressBar = document.querySelector('.swiper-progressbar .progress-fill');
 +
            if (progressBar) {
 +
              progressBar.style.width = `${percent}%`;
 +
            }
 +
           };
 +
 
 +
          const handleResize = () => {
 +
            if (breakpoint.matches) {
 +
              initMobile();
 +
            } else {
 +
              initDesktop();
 +
            }
 +
          };
  
        const updateProgress = () => {
+
          breakpoint.addEventListener('change', handleResize);
           if (!swiperInstance) return;
+
           handleResize();
          const current = swiperInstance.realIndex + 1;
+
        });
          const total = swiperInstance.slides.length;
+
        document.addEventListener('DOMContentLoaded', function () {
           const percent = (current / total) * 100;
+
           // 공통 브레이크포인트 기준
           const progressBar = document.querySelector('.swiper-progressbar .progress-fill');
+
           const breakpoint = window.matchMedia('(max-width: 991px)');
          if (progressBar) {
 
            progressBar.style.width = `${percent}%`;
 
          }
 
        };
 
  
        const handleResize = () => {
+
           // Story Swiper (모바일 전용 터치)
          if (breakpoint.matches) {
+
           let storySwiper;
            initMobile();
 
           } else {
 
            initDesktop();
 
           }
 
        };
 
  
        breakpoint.addEventListener('change', handleResize);
+
          const initStorySwiper = () => {
        handleResize();
+
            const isMobile = breakpoint.matches;
      });
 
    </script>
 
    <script>
 
      document.addEventListener('DOMContentLoaded', function () {
 
        // 공통 브레이크포인트 기준
 
        const breakpoint = window.matchMedia('(max-width: 991px)');
 
  
        // Story Swiper (모바일 전용 터치)
+
            if (storySwiper) storySwiper.destroy(true, true);
        let storySwiper;
 
  
        const initStorySwiper = () => {
+
            storySwiper = new Swiper('.story-swiper .swiper', {
          const isMobile = breakpoint.matches;
+
              slidesPerView: 1,
 +
              spaceBetween: 24,
 +
              grabCursor: isMobile,
 +
              simulateTouch: isMobile,
 +
              allowTouchMove: isMobile,
 +
              pagination: {
 +
                el: '.swiper-pagination',
 +
                clickable: true,
 +
              },
 +
              navigation: {
 +
                nextEl: '.swiper-button-next',
 +
                prevEl: '.swiper-button-prev',
 +
              },
 +
              mousewheel: isMobile
 +
                ? {
 +
                    forceToAxis: true,
 +
                    invert: false,
 +
                  }
 +
                : false,
 +
              on: {
 +
                progress: function (swiper, progress) {
 +
                  const indicatorBar = swiper.el.querySelector('.indicator-bar');
 +
                  if (indicatorBar) {
 +
                    indicatorBar.style.width = progress * 100 + '%';
 +
                  }
 +
                },
 +
              },
 +
            });
 +
          };
  
           if (storySwiper) storySwiper.destroy(true, true);
+
           breakpoint.addEventListener('change', initStorySwiper);
 +
          initStorySwiper();
  
           storySwiper = new Swiper('.story-swiper .swiper', {
+
           // Asset Swiper type01
             slidesPerView: 1,
+
          const swiper01 = new Swiper('.asset-swiper .type01', {
             spaceBetween: 24,
+
            loop: true,
             grabCursor: isMobile,
+
            slidesPerView: 'auto',
             simulateTouch: isMobile,
+
            spaceBetween: 8,
             allowTouchMove: isMobile,
+
            autoplay: {
 +
              delay: 0,
 +
              disableOnInteraction: false,
 +
            },
 +
            speed: 5000,
 +
            freeMode: true,
 +
            breakpoints: {
 +
              991: {
 +
                spaceBetween: 28,
 +
              },
 +
            },
 +
          });
 +
 
 +
          // Asset Swiper type02
 +
          const swiper02 = new Swiper('.asset-swiper .type02', {
 +
            loop: true,
 +
             slidesPerView: 'auto',
 +
            spaceBetween: 8,
 +
            autoplay: {
 +
              delay: 0,
 +
              disableOnInteraction: false,
 +
              reverseDirection: true,
 +
            },
 +
            speed: 5000,
 +
            freeMode: true,
 +
             breakpoints: {
 +
              991: {
 +
                spaceBetween: 28,
 +
              },
 +
            },
 +
          });
 +
        });
 +
 
 +
        document.addEventListener('DOMContentLoaded', function () {
 +
          const progressBar = document.querySelector('.gwangju-main-section04 .progress-bar');
 +
          const metaverseSlider = new Swiper('.gwangju-metaverse-slider', {
 +
             loop: true,
 +
             slidesPerView: 1.2,
 +
             spaceBetween: 15,
 
             pagination: {
 
             pagination: {
 
               el: '.swiper-pagination',
 
               el: '.swiper-pagination',
               clickable: true,
+
               type: 'fraction',
            },
 
            navigation: {
 
              nextEl: '.swiper-button-next',
 
              prevEl: '.swiper-button-prev',
 
 
             },
 
             },
            mousewheel: isMobile
 
              ? {
 
                  forceToAxis: true,
 
                  invert: false,
 
                }
 
              : false,
 
 
             on: {
 
             on: {
               progress: function (swiper, progress) {
+
               slideChange: function () {
                 const indicatorBar = swiper.el.querySelector('.indicator-bar');
+
                 const totalSlides = this.slides.length - this.loopedSlides * 2;
                 if (indicatorBar) {
+
                const progress = (this.realIndex + 1) / totalSlides;
                   indicatorBar.style.width = progress * 100 + '%';
+
                 if (progressBar) {
 +
                   progressBar.style.width = progress * 100 + '%';
 
                 }
 
                 }
 +
              },
 +
            },
 +
            breakpoints: {
 +
              769: {
 +
                slidesPerView: 3,
 +
                spaceBetween: 30,
 +
              },
 +
              1024: {
 +
                slidesPerView: 4,
 +
                spaceBetween: 30,
 
               },
 
               },
 
             },
 
             },
 
           });
 
           });
 +
        });
 +
        var animation = {
 +
          duration: (document.querySelectorAll('.keen-slider__slide').length / 2) * 1500,
 +
          easing: t => t,
 
         };
 
         };
  
         breakpoint.addEventListener('change', initStorySwiper);
+
         // 변수 초기화
         initStorySwiper();
+
        let slider = null;
 
+
        let slider2 = null;
         // Asset Swiper type01
+
        let autoplayActive = true;
         const swiper01 = new Swiper('.asset-swiper .type01', {
+
        let autoplayTimeoutId = null;
 +
        let isSyncingSlider1 = false;
 +
         let isSyncingSlider2 = false;
 +
        let isMouseOverContainer = false; // 컨테이너 마우스 상태 추적 변수
 +
         // 슬라이더 2 먼저 초기화
 +
         slider2 = new KeenSlider('#my-keen-slider2', {
 
           loop: true,
 
           loop: true,
           slidesPerView: 'auto',
+
           renderMode: 'performance',
           spaceBetween: 8,
+
          mode: 'free',
           autoplay: {
+
           rtl: true,
             delay: 0,
+
           slides: {
             disableOnInteraction: false,
+
             perView: 'auto',
 +
             spacing: 8,
 
           },
 
           },
          speed: 5000,
 
          freeMode: true,
 
 
           breakpoints: {
 
           breakpoints: {
             991: {
+
             '(min-width: 500px)': {
               spaceBetween: 28,
+
               slides: {
 +
                perView: 'auto',
 +
                spacing: 28,
 +
              },
 
             },
 
             },
 +
          },
 +
          created(s) {
 +
            if (!isMouseOverContainer) {
 +
              s.moveToIdx(5, true, animation);
 +
            }
 +
          },
 +
          animationEnded(s) {
 +
            // if (!isMouseOverContainer) {
 +
            slider2.endTimer = setTimeout(() => {
 +
              slider?.moveToIdx(slider.track.details.abs + 4, true, animation);
 +
              s.moveToIdx(s.track.details.abs + 5, true, animation);
 +
            }, 1000);
 +
            // }
 +
          },
 +
          detailsChanged(s) {
 +
            // 마우스가 컨테이너 위에 있을 때만 동기화 작동
 +
            if (slider2?.endTimer) clearTimeout(slider2?.endTimer);
 +
            if (!isSyncingSlider1) {
 +
              if (slider) {
 +
                if (slider.track) {
 +
                  slider.animator.stop();
 +
                  isSyncingSlider2 = true;
 +
                  // 위치 동기화
 +
                  const position = s.track.details.position;
 +
                  slider.track.to(position);
 +
                  setTimeout(() => {
 +
                    isSyncingSlider2 = false;
 +
                  }, 30);
 +
                }
 +
              }
 +
            }
 
           },
 
           },
 
         });
 
         });
  
         // Asset Swiper type02
+
         // slider1 초기화
         const swiper02 = new Swiper('.asset-swiper .type02', {
+
         slider = new KeenSlider('#my-keen-slider', {
 
           loop: true,
 
           loop: true,
           slidesPerView: 'auto',
+
           renderMode: 'performance',
           spaceBetween: 8,
+
           mode: 'free',
          autoplay: {
 
            delay: 0,
 
            disableOnInteraction: false,
 
            reverseDirection: true,
 
          },
 
          speed: 5000,
 
          freeMode: true,
 
 
           breakpoints: {
 
           breakpoints: {
             991: {
+
             '(min-width: 500px)': {
               spaceBetween: 28,
+
               slides: {
 +
                perView: 'auto',
 +
                spacing: 28,
 +
              },
 
             },
 
             },
 
           },
 
           },
        });
+
          slides: {
      });
+
            perView: 'auto',
    </script>
+
            spacing: 8,
    <script>
+
          },
      document.addEventListener('DOMContentLoaded', function () {
+
          created(s) {
        const progressBar = document.querySelector('.gwangju-main-section04 .progress-bar');
+
            if (!isMouseOverContainer) {
        const metaverseSlider = new Swiper('.gwangju-metaverse-slider', {
+
              s.moveToIdx(5, true, animation);
          loop: true,
+
            }
          slidesPerView: 1.2,
+
          },
          spaceBetween: 15,
+
          animationEnded(s) {
          pagination: {
+
            // if (!isMouseOverContainer) {
             el: '.swiper-pagination',
+
            slider.endTimer = setTimeout(() => {
             type: 'fraction',
+
              slider2?.moveToIdx(slider2.track.details.abs + 4, true, animation);
 +
              s.moveToIdx(s.track.details.abs + 5, true, animation);
 +
             }, 1000);
 +
             // }
 
           },
 
           },
           on: {
+
           detailsChanged(s) {
             slideChange: function () {
+
             if (slider?.endTimer) clearTimeout(slider?.endTimer);
               const totalSlides = this.slides.length - this.loopedSlides * 2;
+
            // 마우스가 컨테이너 위에 있을 때만 동기화 작동
              const progress = (this.realIndex + 1) / totalSlides;
+
            if (!isSyncingSlider2) {
              if (progressBar) {
+
               if (slider2) {
                progressBar.style.width = progress * 100 + '%';
+
                if (slider2.track) {
 +
                  slider2.animator.stop();
 +
                  isSyncingSlider1 = true;
 +
                  slider2.track.to(s.track.details.position);
 +
                  setTimeout(() => {
 +
                    isSyncingSlider1 = false;
 +
                  }, 30);
 +
                }
 
               }
 
               }
             },
+
             }
          },
 
          breakpoints: {
 
            769: {
 
              slidesPerView: 3,
 
              spaceBetween: 30,
 
            },
 
            1024: {
 
              slidesPerView: 4,
 
              spaceBetween: 30,
 
            },
 
 
           },
 
           },
 
         });
 
         });
      });
+
 
    </script>
+
        // 컨테이너 하나에만 마우스 이벤트 적용
    <script src="https://cdn.jsdelivr.net/npm/keen-slider@6.8.5/keen-slider.min.js"></script>
+
        document.querySelector('.asset-swiper').addEventListener('pointerdown', () => {
      <script>
+
          // 타임아웃 삭제
var animation = {
+
          if (autoplayTimeoutId) clearTimeout(autoplayTimeoutId);
  duration: (document.querySelectorAll('.keen-slider__slide').length / 2) * 500,
+
 
  easing: t => t,
+
          // 현재 진행 중인 애니메이션 중단
};
+
          if (slider) {
 
+
            if (slider.animator) {
// 변수 초기화
+
              slider.animator.stop();
let slider = null;
+
            }
let slider2 = null;
+
          }
let autoplayActive = true;
+
          if (slider2) {
let autoplayTimeoutId = null;
+
            if (slider2.animator) {
let isSyncingSlider1 = false;
+
              slider2.animator.stop();
let isSyncingSlider2 = false;
+
            }
let isMouseOverContainer = false; // 컨테이너 마우스 상태 추적 변수
+
          }
// 슬라이더 2 먼저 초기화
+
        });
slider2 = new KeenSlider('#my-keen-slider2', {
+
      </script>
  loop: true,
+
      <!-- // 에디터 컨텐츠 등록 영역 -->}}
  renderMode: 'performance',
 
  mode: 'free',
 
  rtl: true,
 
  slides: {
 
perView: 'auto',
 
spacing: 8,
 
  },
 
  breakpoints: {
 
'(min-width: 500px)': {
 
slides: {
 
perView: 'auto',
 
spacing: 28,
 
},
 
},
 
},
 
  created(s) {
 
if (!isMouseOverContainer) {
 
  s.moveToIdx(5, true, animation);
 
}
 
  },
 
  animationEnded(s) {
 
// if (!isMouseOverContainer) {
 
slider2.endTimer = setTimeout(()=>{
 
  slider?.moveToIdx(slider.track.details.abs + 4, true, animation);
 
  s.moveToIdx(s.track.details.abs + 5, true, animation);
 
},1000)
 
// }
 
  },
 
  detailsChanged(s) {
 
// 마우스가 컨테이너 위에 있을 때만 동기화 작동
 
if(slider2?.endTimer) clearTimeout(slider2?.endTimer);
 
if (!isSyncingSlider1) {
 
if(slider){
 
if(slider.track){
 
slider.animator.stop();
 
isSyncingSlider2 = true;
 
// 위치 동기화
 
const position = s.track.details.position;
 
slider.track.to(position);
 
setTimeout(() => {
 
isSyncingSlider2 = false;
 
}, 30);
 
}
 
}
 
}
 
  },
 
});
 
 
 
// slider1 초기화
 
slider = new KeenSlider('#my-keen-slider', {
 
  loop: true,
 
  renderMode: 'performance',
 
  mode: 'free',
 
  breakpoints: {
 
'(min-width: 500px)': {
 
slides: {
 
perView: 'auto',
 
spacing: 28,
 
},
 
},
 
},
 
  slides: {
 
perView: 'auto',
 
spacing: 8,
 
  },
 
  created(s) {
 
if (!isMouseOverContainer) {
 
  s.moveToIdx(5, true, animation);
 
}
 
  },
 
  animationEnded(s) {
 
// if (!isMouseOverContainer) {
 
slider.endTimer = setTimeout(()=>{
 
slider2?.moveToIdx(slider2.track.details.abs + 4, true, animation);
 
s.moveToIdx(s.track.details.abs + 5, true, animation);
 
},1000)
 
// }
 
  },
 
  detailsChanged(s) {
 
if(slider?.endTimer) clearTimeout(slider?.endTimer);
 
// 마우스가 컨테이너 위에 있을 때만 동기화 작동
 
if (!isSyncingSlider2    ) {
 
if(slider2){
 
if(slider2.track){
 
slider2.animator.stop();
 
isSyncingSlider1 = true;
 
slider2.track.to(s.track.details.position);
 
setTimeout(() => {
 
isSyncingSlider1 = false;
 
}, 30);
 
}
 
}
 
}
 
  },
 
});
 
 
 
// 컨테이너 하나에만 마우스 이벤트 적용
 
document.querySelector('.asset-swiper').addEventListener('pointerdown', () => {
 
  // 타임아웃 삭제
 
  if (autoplayTimeoutId) clearTimeout(autoplayTimeoutId);
 
 
 
  // 현재 진행 중인 애니메이션 중단
 
  if (slider ){
 
if(slider.animator){
 
slider.animator.stop();
 
}
 
  }
 
  if (slider2){
 
if(slider2.animator){
 
slider2.animator.stop();
 
}
 
  }
 
});
 
  </script>
 
  </body>
 
}}
 

2025년 7월 18일 (금) 16:59 판

MEMORIAL SITE

장소로 알아보는
열흘 간의 항쟁 기록

그날의 기억이 머문 장소들을 따라가며, 시간 속에 남은 이야기를 천천히 만나보세요.
번호를 따라가며 클릭하면, 장소마다 담긴 역사적 의미와 당시의 이야기를 자세히 살펴볼 수 있습니다. 광주의 골목골목에 스며든 기억과 그날의 진실과 마주해보세요.

3D ASSET

3D로 보는 광주 인문 아카이브

AR Heritage

광주의 근현대 역사와 문화를 엿볼 수 있는 유산들을 증강현실

광주의 역사적 명소와 문화예술 거점을 AR 콘텐츠로 체험할 수 있는 투어입니다.
실시간 위치 정보와 장소의 맥락을 제공하여 시민들이 지역 인문자원을 향유하도록 기획되었습니다.
AR을 통해 광주 시민들이 공유하는 기억과 감성을 생생하게 느낄 수 있습니다.