전에 업로드 했었던 사이드바를 최종으로 마무리하여 다시 글을 작성한다~~
일단 완성 본!
전에는 닫기 버튼을 이용했었는데 이제는 그냥 삼선 막대기로 열고 닫고 두가지 모두 진행 하고 로고도 넣었다.
닫아도 로고와 막대기는 그자리 그대로에 있고 메인 화면은 전체 화면 사이즈에 맞게 늘어난다.
[JSP]
로그인을 하게 되면 선생님 아이디와 학부모가 로그인 할 수 있는 페이지가 따로 존재한다. 따라서 sidebar 역시 선생님 메뉴와 학부모&학생 메뉴를 따로 구성 해 주었다. 아래는 전체적인 사이트바의 작동 기능을 포현 한 것이다! 이 사이드바가 모든 페이지의 네비게이션이 되어 사이트를 편리하게 해줄 것이다~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/css/sidemenu.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<title>index</title>
</head>
<body>
<div id="mySidenav" class="sidenav">
<span class="toggle" onclick="toggleNav()">☰
<span><img src="../image/logo2.png" ></span></span>
<a href="/board/list">게시판</a> <a
href="#" id="tlList">선생님 일지</a> <a href="/teacher/list"> 선생님 리스트</a>
<c:if test="${fn:startsWith(sessionScope.loginId, 'c')}">
<a href="/childlog/list?childid=${sessionScope.loginId}">
우리 아이 일지</a>
<a href="/childlog/add">일지작성</a>
<div class="dropdown">
<a href="/child/childinfo?childid=${sessionScope.loginId}" class="dropbtn">마이페이지</a>
<div class="dropdown-content">
<a href="/child/join"> 아이정보입력</a> <a href="/child/listmyclass">
${sessionScope.loginId}반 정보</a> <a href="/child/logout">로그아웃</a>
</div>
</div>
</c:if>
<c:if test="${fn:startsWith(sessionScope.loginId, 't')}">
<a href="/child/childadd">아이회원등록</a>
<a href="/irangclass/list">클래스 리스트</a>
<a href="/child/listall"> 원아 전체목록 </a>
<a id="addTlA"
href="/teacherlog/add?teacherid=${sessionScope.loginId}">일지 작성</a>
<div class="dropdown">
<a href="/teacher/mypage?teacherid=${sessionScope.loginId }" class="dropbtn">마이페이지</a>
<div class="dropdown-content">
<a href="/child/listmyclass2">우리반 관리</a>
<a href="/teacher/logout">로그아웃</a>
<a href="/teacher/delete?teacherid=${sessionScope.loginId}">탈퇴</a>
</div>
</div>
</c:if>
</div>
[Script]
로그인 아이디의 시작이 t ( 선생님) 인지 c (학생&학부모) 인지 charAt 을 이용하여 확인 후 다른 url 주소를 리턴한다.
<script>
$(document).ready(function() {
let loginId = '${sessionScope.loginId}';
console.log(loginId.charAt(0));
let url = '';
if (loginId.charAt(0) == 'c') {
url = '/teacherlog/childList?childid=';
$("#addTlA").hide();
} else if (loginId.charAt(0) == 't') {
url = '/teacherlog/list?teacherid=';
$("#addTlA").show();
}
$(document).on("click", "#tlList", function() {
location.href = url + loginId;
});
});
</script>
전 포스팅에는 EventListener 를 등록하여 DOM을 이용하였는데 해당 방식을 없애고 같은 버튼을 클릭했을때 사이드바가 열곡 닫힘이 표현 되게 하려고 function을 이용하였다.
function toggleNav() 에서 볼 수 있는 것 처럼 const 변수를 사용하여 boolean을 써주는 것 처럼 진행했다. 즉, 화면의 사이즈가 250px (사이드바가 열려 있음) 일 때 해당 삼선 막대기를 누르면 closeNav() 를 실행 하게 하였고 아니라면 openNav() 를 실행 하게 하였다.
<script>
window.onload = function() {
openNav();
}
function toggleNav() {
const sidenav = document.getElementById("mySidenav");
const isOpen = sidenav.style.width === "250px";
if (isOpen) {
closeNav();
} else {
openNav();
}
}
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}
function closeNav() {
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft = "0";
}
</script>
[css]
@charset "UTF-8";
@font-face {
font-family: 'KimjungchulGothic-Bold';
src:
url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2302_01@1.0/KimjungchulGothic-Bold.woff2')
format('woff2');
font-weight: 700;
font-style: normal;
}
body {
font-family: "KimjungchulGothic-Bold";
}
img{
width:150px;
height:150px;
}
.dropbtn {
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
min-width: 160px;
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown:hover .dropdown-content {
display: block;
}
.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #FCEDAA;
overflow-x: hidden;
/* transition: 0.5s; */
padding-top: 160px;
}
.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 15px;
color: #363636;
display: block;
/* transition: 0.3s; */
}
.sidenav a:hover {
color: #A9CFE2;
}
.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
#main {
/* transition: margin-left .5s; */
padding: 16px;
}
span.toggle {
position: fixed;
top: 0;
left: 0;
font-size: 30px;
cursor: pointer;
}
#mySidenav {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.toggle,
img {
display: inline-block;
vertical-align: middle;
}
.toggle {
margin-right: 10px; /* 필요한 간격 조정 */
}
@media screen and (max-height: 450px) {
.sidenav {
padding-top: 15px;
}
.sidenav a {
font-size: 18px;
}
}
'Front' 카테고리의 다른 글
sidebar 만들기 (feat. 시작하자마자 사이드바 실행 및 본문 밀어내기) (0) | 2023.05.29 |
---|