JavaScript/기초

2. 자바스크립트 프로젝트 사전준비2

안양큰스님 2022. 6. 22. 21:50

깃허브 : https://github.com/hgt2768/JavaScriptStudy.git

자바스크립트 연습을 부트 스트랩 템플릿 위에서 하려고 하다보니 매번 페이지를 새로 만들어야되는 불상사가 생김을 인지했다.

 

그래서 각 페이지별로 따로 제작해서 불러오기 위해 jquery와 자바스크립트를 이용한 간단한 함수를 우선 만들게 되었다.

간단한 Helloworld하기도 전에 더 고차원 함수 제작한건 무엇....

 

분리할 부분은 자주 수정이 있을 sliderBar와 contentPage 부분이다.

분리할 부분

다른 곳은 거의 수정하지 않지만 해당부분은 계속 수정하게 되기 때문에 분리하기로 했다.

폴더 구조

폴더 구조는 위 사진과 같이 된다.

contentPage에 include될 것들은 views폴더에 위치하며 용도에 따라 구분토록했다. 

어찌됬든 기초를 배우기 전에 하기에는 무리가 있는 코드들이니 복사 붙여넣기로 만들어 놓자.

내용이 길어 접어 놨음. 코드 확인 ▽ 

더보기

1. index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <meta name="description" content=""/>
    <meta name="author" content=""/>
    <title>Simple Sidebar - Start Bootstrap Template</title>
    <!-- Favicon-->
    <link rel="icon" type="image/x-icon" href="assets/favicon.ico"/>
    <!-- Core theme CSS (includes Bootstrap)-->
    <link href="css/styles.css" rel="stylesheet"/>
    <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    <script src="js/includeHTML.js" defer></script>
    <script defer>
        $(document).ready(() =>{
            changePageContent("./default.html");
        })
    </script>
</head>
<body>
<div class="d-flex" id="wrapper">
    <!-- Sidebar-->
    <div class="border-end bg-white" id="sidebar-wrapper">
        <div class="sidebar-heading border-bottom bg-light">자바스크립트 Basic</div>
        <!-- sliderBar 삽입 부분 -->
        <div class="list-group list-group-flush" id="list-group"></div>
    </div>
    <!-- Page content wrapper-->
    <div id="page-content-wrapper">
        <!-- Top navigation-->
        <nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
            <div class="container-fluid">
                <!-- 상단 Toggle Menu 버튼 위치 -->
                <button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse"
                        data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span>
                </button>
                <!-- 우측 상단 Toggle Menu -->
                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <ul class="navbar-nav ms-auto mt-2 mt-lg-0">
                        <li class="nav-item active"><a class="nav-link" href="#!" onclick="changePageContent('./default.html')">Home</a></li>
                        <li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
                        <!-- 드롭 다운 메뉴 -->
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button"
                               data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
                            <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item" href="#!">Action</a>
                                <a class="dropdown-item" href="#!">Another action</a>
                                <div class="dropdown-divider"></div>
                                <a class="dropdown-item" href="#!">Something else here</a>
                            </div>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
        <!-- Page content 위치-->
        <div class="container-fluid" id="pageContent">
        </div>
    </div>
</div>
<!-- Bootstrap core JS-->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<!-- Core theme JS-->
<script src="js/scripts.js"></script>
</body>
</html>

 2. includeHTML.js

// html load

// sliderBar load
$(document).ready(()=>{
    $('#list-group').load("sliderBar.html");    // list
});

// pageContent load
function changePageContent(htmlFileName) {
    $(document).ready(() => {
        $("#pageContent").load(htmlFileName);
    });
};

 3. sliderBar.html

<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!" onclick="changePageContent('./views/basic/helloWorld.html')">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>

 4. default.html

<h1 class="mt-4">Simple Sidebar</h1>
<p>The starting state of the menu will appear collapsed on smaller screens, and will appear non-collapsed on
  larger screens. When toggled using the button below, the menu will change.</p>
<p>
  Make sure to keep all page content within the
  <code>#page-content-wrapper</code>
  . The top navbar is optional, and just for demonstration. Just create an element with the
  <code>#sidebarToggle</code>
  ID which will toggle the menu when clicked.
</p>

 5. helloWorld.html

<h1>hi</h1>
// sliderBar load
$(document).ready(()=>{
    $('#list-group').load("sliderBar.html");    // list
});

핵심은 이 코드이다. jquery를 이용해 파일을 읽어 include하는 것이다. 순수 javascript로 하면 코드가 복잡해지나, jqeury를 이용하면 이렇게 간단해진다.

// pageContent load
function changePageContent(htmlFileName) {
    $(document).ready(() => {
        $("#pageContent").load(htmlFileName);
    });
};

앞으로 페이지를 만들면 해당 함수로 이동하게 끔 되어있다.

예를 들어 좌측 슬라이드 매뉴의 <a>태그나 <button>에다가 onclick 이벤트로 해당함수를 넣어놓고 파라미터로 html파일의 경로를 넣어주면 클릭할때마다 해당 html을 pageContent 영역에 include해준다.

 

이제 기초 연습 겸 기록하는 홈페이지의 준비가 완료되었다.